Day100 | 灵神 | 二叉树 单值二叉树
965.单值二叉树
思路:
笔者的思路是后序遍历传入两参数,一个是节点另一个是单值的值,只要一样就是true,不一样就是false,缺点是如果当然节点已经不满足条件了,还是会处理完左右子树再来处理根节点
也可以先序遍历,就是先判断是不是是不是val,是的话就不处理下面的左右子树了
完整代码:
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);
}
};
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
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;
}
};