【Leetcode】965. 单值二叉树、100. 相同的树、572. 另一棵树的子树

淡淡的烟草味﹌ 2024-03-30 11:39 182阅读 0赞

作者:一个喜欢猫咪的的程序员

专栏:《Leetcode》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》

d62cffa130804aa38f2fcab2ecf3359f.jpeg


目录

  1. 单值二叉树

    1. 相同的树
  2. 另一棵树的子树


965. 单值二叉树

965. 单值二叉树icon-default.png_t_M85Bhttps://leetcode.cn/problems/univalued-binary-tree/

题目描述:

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false


示例:

8cd4a916506243c48d16e7ed2c15b4a1.png


思路:

左右节点都不为NULL,当root跟它的左右节点其中一个不相等时,就不是单值二叉树。当root的左右节点有一个为NULL,只需要比较另外一个不为NULL是否与root相等就可以了。这样递归就可以完成。

85059e21ce02407aa68d0d91a9f52f4d.gif


代码实现:

  1. bool isUnivalTree(struct TreeNode* root){
  2. if(root==NULL)
  3. return true;
  4. if(root->left&&root->left->val!=root->val)
  5. return false;
  6. if(root->right&&root->right->val!=root->val)
  7. return false;
  8. return isUnivalTree(root->left)&&isUnivalTree(root->right);
  9. }

100. 相同的树

100. 相同的树icon-default.png?t=M85Bhttps://leetcode.cn/problems/same-tree/

题目描述:

给你两棵二叉树的根节点 pq ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。


示例:

a616db58af2441828f3a6b1a9c8b865f.png


思路:

当p和q都不为NULL时,对应的节点相等,就递归他们左右节点继续判断。否则return false。

只有当p和q都为NULL时,return true。


代码实现:

  1. bool isSameTree(struct TreeNode* p, struct TreeNode* q){
  2. if(p==NULL&&q==NULL)
  3. return true;
  4. if(p&&q)
  5. {
  6. if(p->val==q->val)
  7. return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
  8. else
  9. return false;
  10. }
  11. else
  12. return false;
  13. }

572. 另一棵树的子树

572. 另一棵树的子树icon-default.png?t=M85Bhttps://leetcode.cn/problems/subtree-of-another-tree/

题目描述:

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。


示例:

ffd3019793014115b7a9cde98350f732.png

0efced153e4e4c2baf381a28a7cfd652.png


思路:

利用上题相同的数的代码作为函数。

当树相等时,直接放回true。否则直接遍历每一个子树,当有一个子树相等时就返回true,否则返回false。


代码实现:

  1. bool isSameTree(struct TreeNode* p, struct TreeNode* q){
  2. if(p==NULL&&q==NULL)
  3. return true;
  4. if(p&&q)
  5. {
  6. if(p->val==q->val)
  7. return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
  8. else
  9. return false;
  10. }
  11. else
  12. return false;
  13. }
  14. bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
  15. if(root==NULL)
  16. return false;
  17. if(isSameTree(root,subRoot))
  18. return true;
  19. else
  20. return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
  21. }

发表评论

表情:
评论列表 (有 0 条评论,182人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode572. 一个

    给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。

    相关 Leetcode965

    如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 `true`;否则返回 `false`。 思路:递归即可,即满足,则是左