首页 > 其他分享 >LCR 047. 二叉树剪枝(中等)(主站814)

LCR 047. 二叉树剪枝(中等)(主站814)

时间:2024-12-09 09:00:19浏览次数:7  
标签:剪枝 right return pruneTree 主站 二叉树 null root 节点

https://leetcode.cn/problems/pOCWxh/
https://leetcode.cn/problems/binary-tree-pruning/
难度:☆☆☆

题目:

给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。节点 node 的子树为 node 本身,以及所有 node 的后代。

示例:

在这里插入图片描述
输入: [1,null,0,0,1]
输出: [1,null,0,null,1]
解释:
只有红色节点满足条件“所有不包含 1 的子树”。
右图为返回的答案。

方法:DFS递归后序遍历剪枝

树相关的题目首先考虑用递归解决。

  • 首先确定边界条件,当输入为空时,即可返回空。
  • 然后对左子树和右子树分别递归进行 pruneTree 操作。
  • 递归完成后,从叶子节点往上逆推,当这三个条件:左子树为空,右子树为空,当前node.val的值为 0,同时满足时,才表示以当前节点为根的原二叉树的所有节点都为 0,需要将这棵子树移除,返回空(node = null)。有任一条件不满足时,当前节点不应该移除,返回当前节点。

Python

class Solution:
    def pruneTree(self, root: TreeNode) -> TreeNode:
        if not root:
            return
        root.left = self.pruneTree(root.left)
        root.right = self.pruneTree(root.right)
        if not root.left and not root.right and root.val == 0:
            return
        return root

Java

class Solution {
    public TreeNode pruneTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        root.left = pruneTree(root.left);
        root.right = pruneTree(root.right);
        if (root.left == null && root.right == null && root.val == 0) {
            return null;
        }
        return root;
    }
}

标签:剪枝,right,return,pruneTree,主站,二叉树,null,root,节点
From: https://blog.csdn.net/weixin_43606146/article/details/144281255

相关文章

  • 二叉树的C++实现
    文章目录一、二叉树存储的物理结构1.1二叉树基础知识1.2二叉树的存储1.2.1单个节点的存储:1.2.2二叉树的存储二、C++代码实现2.1每个二叉树节点结构体:2.2二叉树类的定义2.3方法实现一、二叉树存储的物理结构1.1二叉树基础知识(1)二叉树的定义:每个节点最多......
  • 二叉树遍历
    前序顺序为根左右递归publicstaticvoidpreLoop(TreeNoderoot){System.out.println(root.value);if(root.left!=null){preLoop(root.left);}if(root.right!=null){preLoop(root.right);}}其他使用栈,以根右左的顺......
  • 【Leetcode Top 100】94. 二叉树的中序遍历
    问题背景给定一个二叉树的根节点rootrootroot,返回它的中序遍历。数据约......
  • 199.二叉树的右视图
    /***@param{TreeNode}root*@return{number[]}*/varrightSideView=function(root){if(!root)return[];letdethMap=newMap();//Map夺储,key是当国节点的高度,value是我们当前节点的信;letqueue=[[root,0]];while(queue.length){//取出......
  • c语言实现二叉树的创建、遍历(先序、中序、后序)
    二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树在计算机科学中具有广泛的应用,如表达式解析、数据存储与检索等。以下是有关二叉树的基本知识。1.二叉树的基本定义节点:二叉树的基本组成单元,包括节点值和指向其子节点的指针(左指......
  • 根据后序遍历完全二叉树构建树并输出中序遍历
    来看这道题:之前编者想了很久,该如何仅根据后序序列建树,在反复研磨遍历的特征后,我突然发现:对于完全二叉树,我们完全可以采用其在线性表示(用数组)的性质解题性质:根节点x, 左子树索引为2x,右子树索引为2x+1且不为空。则,我们只需按后序遍历的特点递归建树即可。上代码:......
  • 数据结构5——二叉树
    走上计算机的道路,疲惫和无力会不断向你袭来。虽途艰路险,然功成之日,往昔困厄皆为序章,亦足慰心怀,堪称圆满。目录1.树概念及结构1.1树的概念1.2树的相关概念1.3树的表示1.4树在实际中的运用(表示文件系统的目录树结构)2.二叉树概念及结构2.1概念2.2现实中的二叉树2.3特......
  • 洛谷P1305 新二叉树(c嘎嘎)
    题目链接:P1305新二叉树-洛谷|计算机科学教育新生态题目难度:普及刷题心得:做了几道这种类型的题都不用建树就可以解决,基本上还是利用好树的结构,例如这道题求前序序列(根左右)是可以用递归来求的。无非就是先从根出发,递归遍历左子树,递归遍历右子树,遇到 *直接返回就行了......
  • 二叉树遍历
    [Algo]二叉树遍历二叉树节点类型定义:structBinaryTreeNode{intval;BinaryTreeNode*left;BinaryTreeNode*right;BinaryTreeNode(intx):val(x),left(nullptr),right(nullptr){}};1.前序遍历//1.非递归前序遍历二叉树//(1)弹出栈顶(2)......
  • 关于二叉树的先/中/后序的非递归遍历
    力扣上有原题~中 先后前言先前跟着acwing学习算法基础课,自以为已经掌握了基础的算法和数据结构,剩下就差做题了,结果之后在力扣和洛谷上看到有关二叉树的题目,完全不知道是怎么一回事,故开始二叉树的学习(果然学习数据结构基础不能光看课)正文本片文章主要讲述二叉树的先中后......