题目描述: 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树,只有给定的树是单值二叉树时,才返回 true;否则返回 false。。
示例1:
1 | 输入:[1,1,1,1,1,null,1] |
示例2:
1 | 输入:[2,2,2,5,2] |
题解方法一:深度优先搜索
解题思路
一棵树的所有节点都有相同的值,当且仅当对于树上的每一条边的两个端点,它们都有相同的值(这样根据传递性,所有节点都有相同的值)。
因此,我们可以对树进行一次深度优先搜索。当搜索到节点 x 时,我们检查 x 与 x 的每一个子节点之间的边是否满足要求。
- 例如对于左子节点而言,如果其存在并且值与 x 相同,那么我们继续向下搜索该左子节点;如果值与 x 不同,那么我们直接返回 False。
代码实现如下:1
2
3
4
5
6
7
8
9
10var isUnivalTree = function(root) {
if (!root) return false
if(root.left){
if(root.val !== root.left.val || !isUnivalTree(root.left)) return false
}
if(root.right){
if(root.val !== root.right.val || !isUnivalTree(root.right)) return false
}
return true
};
结束语
总结:大功告成✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️