一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 7 天,点击查看活动详情。
题目链接
965. 单值二叉树 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
测试用例
示例 1:
输入:[1,1,1,1,1,null,1]
输出:true
限制
给定树的节点数范围是 [1, 100]。
每个节点的值都是整数,范围为 [0, 99] 。
题目分析
题目对单值二叉树的定位即为:树中所有的节点的值,全部相等
最简单的一种解法,完整的遍历一次二叉树,用 let set = new Set() 储存下所有的节点的值,最后判断 set 中元素的个数是否为 1,即可知道此树是否为题目所需要的单值二叉树
代码实现
上一步的分析中,计划使用 Set 的特性来判断节点的不同的值的情况,需要完整的遍历一次树。
可以优化为,使用一个变量 val 记录下 root 的值,引入一个 flag = true 默认此树为单值树
然后开始对树进行递归遍历:每次遍历到节点时,将节点的值与开头记录的 val 进行比较,一旦值不相等,则修改 flag = false 并终止树的递归(因为已经没有必要去继续校验后续的节点的值了)
这种改进方案的优势在于,只要发现其中一个节点的值不同,立马终止递归校验,提高效率
var isUnivalTree = function(root) {
let val = root.val;
let flag = true;
trave(root);
return flag;
function trave(node) {
if (node == null || flag == false) return;
if (node.val != val) {
flag = false;
return;
}
trave(node.left);
trave(node.right);
}
};