打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
LeetCode 101. 对称二叉树(Symmetric Tree)

题目描述

 

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

    1   /   2   2 / \ / 3  4 4  3

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1   /   2   2   \      3    3

说明:

如果你可以运用递归和迭代两种方法解决这个问题,会很加分。

 

解题思路

 

本题可用递归和迭代两种做法来求解。

递归做法是每次对于对称的两个节点,首先判断是否都为空,若都为空则返回true;否则判断两节点是否相等,若相等则返回它们对应的子节点的比较结果;否则返回false。

迭代做法是维护一个节点队列,每次取出队列头部两个节点比较其是否相等,若不相等且两节点均不为空,则依次把两个节点对称位置的子节点加入到队列中,注意null也要加入到队列;否则返回false

 

代码

 

递归:

 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 symmetric(root->left, root->right);15     }16     bool symmetric(TreeNode* left, TreeNode* right){17         if(left == right) return true;18         else if(left && right && left->val == right->val){19             if(symmetric(left->left, right->right) && symmetric(left->right, right->left)) 20                 return true;21         }22         return false;23     }24 };

 

迭代:

 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         queue<TreeNode*> q;15         q.push(root->left);16         q.push(root->right);17         while(q.size()){18             TreeNode* node1 = q.front();19             q.pop();20             TreeNode* node2 = q.front();21             q.pop();22             if(node1 && node2){23                 if(node1->val != node2->val) return false;24                 else{25                     q.push(node1->left);26                     q.push(node2->right);27                     q.push(node1->right);28                     q.push(node2->left);29                 }30             }31             else if(node1 || node2) return false;32         }33         return true;34     }35 };

 

来源:http://www.icode9.com/content-4-46001.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【101-Symmetric Tree(对称树)】
刻意练习:LeetCode实战 -- Task20. 对称二叉树
万字长文!二叉树入门和刷题看这篇就够了!
​LeetCode刷题实战572:另一棵树的子树
401,删除二叉搜索树中的节点
面对分治算法,看这两道题就够了
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服