题目地址:
https://leetcode.com/problems/univalued-binary-tree/
给定一棵二叉树,判断其值是否都相同。
可以用分治。如果是空树直接返回true。否则先取出树根的值 v a l val val,然后分别看左右子树是否全等于 v a l val val即可。代码如下:
public class Solution {
public boolean isUnivalTree(TreeNode root) {
if (root == null) {
return true;
}
return dfs(root, root.val);
}
// 判断以root为根的子树是否全等于val
boolean dfs(TreeNode root, int val) {
if (root == null) {
return true;
}
// 整棵树全等于val等价于树根与左右子树都等于val
return root.val == val && dfs(root.left, val) && dfs(root.right, val);
}
}
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。
C++:
class Solution {
public:
bool isUnivalTree(TreeNode* root) {
if (!root) return true;
return dfs(root, root->val);
}
bool dfs(TreeNode* p, int v) {
if (!p) return true;
return p->val == v && dfs(p->left, v) && dfs(p->right, v);
}
};
时空复杂度一样。