单值二叉树
难度:
标签:
题目描述
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true
;否则返回 false
。
示例 1:
输入:[1,1,1,1,1,null,1] 输出:true
示例 2:
输入:[2,2,2,5,2] 输出:false
提示:
- 给定树的节点数范围是
[1, 100]
。 - 每个节点的值都是整数,范围为
[0, 99]
。
代码结果
运行时间: 23 ms, 内存: 0.0 MB
/*
* 思路:
* 1. 使用Java Stream API来遍历二叉树。
* 2. 将树的所有节点值收集到一个列表中。
* 3. 检查列表中的所有值是否相同。
*/
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Solution {
public boolean isUnivalTree(TreeNode root) {
if (root == null) return true;
List<Integer> values = new ArrayList<>();
collectValues(root, values);
return values.stream().distinct().count() == 1;
}
private void collectValues(TreeNode node, List<Integer> values) {
if (node == null) return;
values.add(node.val);
collectValues(node.left, values);
collectValues(node.right, values);
}
}
解释
方法:
该题解采用了迭代的方式来遍历树,以判断是否所有节点的值都相同。首先,方法定义了一个目标值 targetValue,它是树根节点的值。然后,使用一个栈来存储待检测的树节点。循环会持续到栈为空,每次循环中,从栈中弹出一个节点并检查其值是否等于目标值。如果不等,则立即返回 False。如果相等,则将该节点的左右子节点(如果存在)加入栈中继续检查。如果所有节点检查完毕,且都与目标值相同,则返回 True。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
在迭代遍历中,为什么选择使用栈而不是队列?这对算法的效率有什么影响?
▷🦆
如何处理树中存在null节点的情况,尤其是对于非满二叉树?
▷🦆
在该迭代方法中,如果初始根节点是null,该如何处理?
▷