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; } };
|