本文主要是介绍Leetcode--Java--814. 二叉树剪枝,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
给你二叉树的根结点 root ,此外树的每个结点的值要么是 0 ,要么是 1 。
返回移除了所有不包含 1 的子树的原二叉树。
节点 node 的子树为 node 本身加上所有 node 的后代。
样例描述
思路
递归
- 依据题目意思,递归检查左右子树是否包含1(返回布尔值),以及当前结点值。左右子树不包含的话,就剪枝,设置为null
代码
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode pruneTree(TreeNode root) {if (containsOne(root)) {return root;} else {return null;}}public boolean containsOne(TreeNode node) {//为空就不包含1if (node == null) {return false;}//递归左右子树是否含1boolean left = containsOne(node.left);boolean right = containsOne(node.right);//剪枝,如果不含1,就剪掉if (!left) node.left = null;if (!right) node.right = null;return node.val == 1 || left || right;}
}
这篇关于Leetcode--Java--814. 二叉树剪枝的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!