文章目录
  1. 1. Symmetric Tree
    1. 1.1. 题目
    2. 1.2. 思路
    3. 1.3. 解题

Symmetric Tree

题目

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3

But the following is not:

  1
 / \
2   2
 \   \
 3    3

Note:

Bonus points if you could solve it both recursively and iteratively.

思路

逐个比较两个对称结点

解题

c++版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/

class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root)
return true;
return traveresal(root->left,root->right);
}

bool traveresal(TreeNode* p,TreeNode* q){
if(!p && !q)
return true;
if(!p && q)
return false;
if(p && !q)
return false;
if(p && q && p->val==q->val)
return traveresal(p->left,q->right) && traveresal(p->right,q->left);
else
return false;
}
};

python版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Definition for a  binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

class Solution:
# @param root, a tree node
# @return a boolean
def isSymmetric(self, root):
if not root:
return True
else:
return self.traverse(root.left,root.right)

def traverse(self,left,right):
if not left and not right:
return True
elif not left and right:
return False
elif not right and left:
return False
elif right.val != left.val:
return False
else:
return self.traverse(left.left,right.right) and self.traverse(left.right,right.left)
文章目录
  1. 1. Symmetric Tree
    1. 1.1. 题目
    2. 1.2. 思路
    3. 1.3. 解题