持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
题目描述
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true
;否则返回 false
。
示例
输入: [1,1,1,1,1,null,1]
输出: true
输入: [2,2,2,5,2]
输出: false
提示
-
- 给定树的节点数范围是
[1, 100]
。
- 给定树的节点数范围是
-
- 每个节点的值都是整数,范围为
[0, 99]
。
- 每个节点的值都是整数,范围为
深度优先搜索
具体实现:
- 将当前节点与其子节点进行比较
- 元素相同时则向下递归
- 不同时则返回结果
- 获取递归结果,进行与运算,判断是否有条件
- 返回结果
class Solution {
public boolean isUnivalTree(TreeNode root) {
// 当节点为空,返回真
if(null == root){
return true;
}
int val = root.val;
boolean flag = true;
// 左边节点递归判断
if(null != root.left){
if(val == root.left.val){
flag &= isUnivalTree(root.left);
}else{
return false;
}
}
// 右边节点递归判断
if(null != root.right){
if(val == root.right.val){
flag &= isUnivalTree(root.right);
}else{
return false;
}
}
// 返回结果
return flag;
}
}
广度优先搜索
具体实现:
- 定义队列,保存当前节点
- 遍历队列中所有元素
- 弹出队首元素,进行条件判断,如果不相同则直接返回
- 将其子元素入队
- 重复3、4两个步骤
- 遍历完所有元素,返回结果
class Solution {
public boolean isUnivalTree(TreeNode root) {
int val = root.val;
// 队列定义
Deque<TreeNode> d = new ArrayDeque<>();
d.addLast(root);
// 遍历队列
while (!d.isEmpty()) {
// 弹出队首元素进行比较
TreeNode poll = d.pollFirst();
if (poll.val != val) return false;
// 子节点入队
if (poll.left != null) d.addLast(poll.left);
if (poll.right != null) d.addLast(poll.right);
}
// 返回结果
return true;
}
}