Day100 | 灵神 | 二叉树 单值二叉树

965.单值二叉树

965. 单值二叉树 - 力扣(LeetCode)

思路:

笔者的思路是后序遍历传入两参数,一个是节点另一个是单值的值,只要一样就是true,不一样就是false,缺点是如果当然节点已经不满足条件了,还是会处理完左右子树再来处理根节点

也可以先序遍历,就是先判断是不是是不是val,是的话就不处理下面的左右子树了

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:
bool tra(TreeNode *t,int val)
{
if(t==nullptr)
return true;
bool l=tra(t->left,val);
bool r=tra(t->right,val);
if(val!=t->val)
return false;
return l&&r;
}
bool isUnivalTree(TreeNode* root) {
return tra(root,root->val);
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
bool tra(TreeNode *t,int val)
{
if(t==nullptr)
return true;
if(val!=t->val)
return false;
return tra(t->left,val)&&tra(t->right,val);
}
bool isUnivalTree(TreeNode* root) {
return tra(root,root->val);
}
};

leetcode的官方题解

用的是前序遍历,也就是dfs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
bool isUnivalTree(TreeNode* root) {
if (!root) {
return true;
}
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;
}
};