当前位置:   article > 正文

leetcode---814. 二叉树剪枝_什么叫做二叉树剪枝

什么叫做二叉树剪枝

给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。

返回移除了所有不包含 1 的子树的原二叉树。

( 节点 X 的子树为 X 本身,以及所有 X 的后代。)

思路:

1)什么是二叉树的剪枝

假设有一棵树,最上层的是root节点,而父节点会依赖子节点。如果现在有一些节点已经标记为无效,我们要删除这些无效节点。如果无效节点的依赖的节点还有效,那么不应该删除,如果无效节点和它的子节点都无效,则可以删除。剪掉这些节点的过程,称为剪枝,目的是用来处理二叉树模型中的依赖问题。

因此剪枝从叶子节点开始遍历,然后再遍历父节点,这样才能保证每次剪枝是逐级剪去无用的节点,到父节点的时候无用的节点都已经去掉。

至底而上的思想,如果为空返回空,递归去求左右子树。

如果当前结点为0,且其左右结点为空,则剪去这个结点也就是置为null。如果不是,则将返回该结点。

  1. public TreeNode pruneTree(TreeNode root) {
  2. if(null == root){
  3. return null;
  4. }
  5. root.left = pruneTree(root.left);
  6. root.right = pruneTree(root.right);
  7. if(0==root.val && null ==root.left && null ==root.right){
  8. return null;
  9. }
  10. return root;
  11. }

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1021232
推荐阅读
相关标签
  

闽ICP备14008679号