赞
踩
给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。
返回移除了所有不包含 1 的子树的原二叉树。
( 节点 X 的子树为 X 本身,以及所有 X 的后代。)
思路:
1)什么是二叉树的剪枝
假设有一棵树,最上层的是root节点,而父节点会依赖子节点。如果现在有一些节点已经标记为无效,我们要删除这些无效节点。如果无效节点的依赖的节点还有效,那么不应该删除,如果无效节点和它的子节点都无效,则可以删除。剪掉这些节点的过程,称为剪枝,目的是用来处理二叉树模型中的依赖问题。
因此剪枝从叶子节点开始遍历,然后再遍历父节点,这样才能保证每次剪枝是逐级剪去无用的节点,到父节点的时候无用的节点都已经去掉。
至底而上的思想,如果为空返回空,递归去求左右子树。
如果当前结点为0,且其左右结点为空,则剪去这个结点也就是置为null。如果不是,则将返回该结点。
- public TreeNode pruneTree(TreeNode root) {
- if(null == root){
- return null;
- }
- root.left = pruneTree(root.left);
- root.right = pruneTree(root.right);
- if(0==root.val && null ==root.left && null ==root.right){
- return null;
- }
- return root;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。