ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2018-10-10 15:51:03  阅读:191  来源: 互联网

标签:


题目描述

 

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

例如,二叉树 [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 };

 

标签:
来源: https://www.cnblogs.com/wmx24/p/9766858.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有