题目大意:
统计同值子树
给定一棵二叉树,请统计出所有的同值子树。
同值子树的定义为:该子树的所有节点值相同。
示例:
输入: root = [5,1,5,5,5,null,5]
5
/ \
1 5
/ \ \
5 5 5
输出: 4 如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=250
解题思路分析:
从树的顶点向下递归,如果该节点与其左右子节点的值都相同,并且左右子树都是同值树,那么当前树也是同值树,结果加一。递归结束条件是叶子节点,叶子节点肯定是同值树,结果加一。
实现代码:
int res=0; // 返回结果
public int countUnivalSubtrees(TreeNode root) {
if(root==null) return 0; // 根节点为空,返回0
helper(root); // 递归求解
return res;
}
// 返回当前树是否为同值树
boolean helper(TreeNode root){
// 如果是叶子节点
if(root.left==null&&root.right==null){
res++; // 返回结果加一
return true; // 返回true
}
boolean isUni=true; // 当前树是否是同值树
if(root.left!=null){ // 左子树不为空
isUni &= helper(root.left); // 查看左子树是否是同值树
isUni &= root.val==root.left.val; // 常看当前节点是否等于左节点
}
if(root.right!=null){ // 右子树不为空
isUni &= helper(root.right); // 查看右子树是否是同值树
isUni &= root.val==root.right.val; // 常看当前节点是否等于右节点
}
if(isUni) res++; // 当前树是同值树,结果加一
return isUni; // 返回当前树是否是同值树
} 本题解法执行时间为0ms。
Runtime: 0 ms, faster than 100.00% of Java online submissions for Count Univalue Subtrees.
Memory Usage: 39.8 MB, less than 42.86% of Java online submissions for Count Univalue Subtrees.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/leetcode-250-count-univalue-subtrees-解题思路分析/