【leetcode-medium】814. Binary Tree Pruning【修剪二叉樹】【自底向上反馈、修剪】

题目

We are given the head node root of a binary tree, where additionally every node's value is either a 0 or a 1.

Return the same tree where every subtree (of the given tree) not containing a 1 has been removed.

(Recall that the subtree of a node X is X, plus every node that is a descendant of X.)

Example 1:
Input: [1,null,0,0,1]
Output: [1,null,0,null,1]
 
Explanation: 
Only the red nodes satisfy the property "every subtree not containing a 1".
The diagram on the right represents the answer.

Example 2:
Input: [1,0,1,0,0,0,1]
Output: [1,null,1,null,1]


Example 3:
Input: [1,1,0,1,1,0,1,0]
Output: [1,1,0,1,1,null,1]


Note:

  • The binary tree will have at most 100 nodes.
  • The value of each node will only be 0 or 1.

解答

解法1:

  • 设置递归的反馈的形式,反馈下层是否有可用的(1)存在。
  • 参数的设置也很重要,传递哪些信息给下层递归。
  • 【小技巧:结构补充】开头添加father是为了后面程序处理的一致性。
public class BinaryTreePruning {
    public TreeNode pruneTree(TreeNode root) {
        TreeNode father = new TreeNode(1);
        father.left = root;
        pruneAndJudgeTree(father,true,father.left);
        if(father.left == null){
            return null;
        }else{
            return father.left;
        }
    }

    public boolean pruneAndJudgeTree(TreeNode parent,boolean isLeft,TreeNode treeNode){
        if(treeNode == null){
            return false;
        }
        boolean isAvailLeft = pruneAndJudgeTree(treeNode,true,treeNode.left);
        boolean isAvailRight = pruneAndJudgeTree(treeNode,false,treeNode.right);
        if(isAvailLeft || isAvailRight){
            return  true;
        }else{
            if(treeNode.val == 1){
                return true;
            }else{
                if(isLeft){
                    parent.left = null;
                }else{
                    parent.right = null;
                }
                return false;
            }
        }
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/TheSnowBoy_2/article/details/81590394