965. 单值二叉树
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回 true;否则返回 false。
示例1:
示例1输入:[1,1,1,1,1,null,1]
输出:true
示例2:
示例2输入:[2,2,2,5,2]
输出:false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/univalued-binary-tree/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
-
创建二叉搜索树
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
-
1. 递归法
思路:
- 递归终止条件为 当前节点为空
- 遍历根节点的左右子树和根节点的值进行比较,如果不同,return false 即可
public boolean isUnivalTree(TreeNode root) {
return isUnivalTree(root, root.val);
}
private boolean isUnivalTree(TreeNode root, int val) {
if (root == null) return true;
if (root.val != val) return false;
return isUnivalTree(root.left, val) && isUnivalTree(root.right, val);
}
复杂度分析:
-
时间复杂度:O(n), 需要遍历每个节点
-
空间复杂度:O(n), 使用了递归,栈中存在 h 个方法调用,h 为二分搜索树的高度
-
2. 迭代法
思路:
- 创建队列或栈, 将根节点添加进去
- 取出队首元素,和根节点的值进行比较,如果不相同就 return false即可
- 将根节点的左右子树添加进去即可
public boolean isUnivalTree(TreeNode root) {
if (root == null) return true;
int val = root.val;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode cur = queue.poll();
if (cur.val != val) return false;
if (cur.left != null) queue.add(cur.left);
if (cur.right != null) queue.add(cur.right);
}
return true;
}
复杂度分析:
- 时间复杂度:O(n), 需要遍历每个节点
- 空间复杂度:O(n), 队列中需要存储 n 个元素
-
源码
-
我会每天更新新的算法,并尽可能尝试不同解法,如果发现问题请指正
- Github
网友评论