【LeetCode101】对称二叉树

举报
野猪佩奇996 发表于 2022/01/23 02:20:50 2022/01/23
【摘要】 一.题目:对称二叉树 2.算法思想  (1)(递归) 对称的条件: 1.根结点相同 2. r1树的左子树同r2树的右子树,r1树的右子树同r2树的左子树。 所以可以用递归实现,注意结构体指针引用元素要用->而不能用小点  (2)(迭代) 用队列迭代,当队列中每两个连续的结点都是相同值时则互为镜像。...

一.题目:对称二叉树

2.算法思想

 (1)(递归)

对称的条件:
1.根结点相同
2. r1树的左子树同r2树的右子树,r1树的右子树同r2树的左子树。
所以可以用递归实现,注意结构体指针引用元素要用->而不能用小点

 (2)(迭代)

用队列迭代,当队列中每两个连续的结点都是相同值时则互为镜像。该队列的处理:每次提取子树左结点A和右结点B和然后比较,然后将A结点的左结点和B结点的右结点插入队列,将A结点的右结点和B结点的左结点插入队列,直至比较到队列为空位置。

3.代码

(1)递归版本


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. bool isSymmetric(TreeNode* root) {
  13. if(root==NULL) return true;
  14. return isSym(root->left,root->right);
  15. }
  16. //判断根结点为r1和r2的两棵树是否是对称的
  17. bool isSym(TreeNode* r1,TreeNode* r2){
  18. if(r1==NULL&&r2==NULL) return true;//能通过第一行则说明两者都不是空
  19. if(r1==NULL||r2==NULL) return false;
  20. //对称的条件:
  21. //1.根结点相同 2.1树的左子树同2树的右子树(右同)
  22. return r1->val==r2->val && isSym(r1->left,r2->right)&&isSym(r1->right,r2->left);
  23. }
  24. };

(2)迭代版本


  
  1. class Solution {
  2. public:
  3. bool isSymmetric(TreeNode* root) {
  4. std::queue<TreeNode*> q;
  5. q.push(root);
  6. q.push(root);
  7. while(!q.empty())//队列空则结束循环
  8. {
  9. TreeNode* t1 = q.front();
  10. q.pop();
  11. TreeNode* t2 = q.front();
  12. q.pop();
  13. if(t1==NULL && t2==NULL)
  14. continue;//continue跳过这一轮
  15. if(t1==NULL || t2==NULL)
  16. return false;//一个空一个不空则结束这层递归
  17. if(t1->val != t2->val)
  18. return false;//此时队列中相邻的两个元素不同则return
  19. q.push(t1->left);
  20. q.push(t2->right);
  21. q.push(t1->right);
  22. q.push(t2->left);
  23. }
  24. return true;
  25. }
  26. };

 

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/104382984

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。