Skip to content

Commit 66fd015

Browse files
authored
Merge pull request gzc426#288 from libihan/libihan-patch-1
Update libh_leetcode101-Symmetric Tree
2 parents d4524f6 + 782fbbf commit 66fd015

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

2018.12.04-leetcode101/李碧涵.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
### [101. Symmetric Tree](https://leetcode.com/problems/symmetric-tree/description/)
2+
**题目描述**
3+
> 判断是否是镜像二叉树(对称)
4+
5+
**例子**
6+
7+
8+
**思想**
9+
(递归)
10+
定义一辅助函数,输入为left和right,判断是否相等。
11+
(迭代)
12+
定义两个栈,层次遍历时判断,并分别从左向右和从右向左存储。
13+
14+
**解法1**
15+
递归
16+
```python
17+
# Definition for a binary tree node.
18+
# class TreeNode(object):
19+
# def __init__(self, x):
20+
# self.val = x
21+
# self.left = None
22+
# self.right = None
23+
24+
class Solution(object):
25+
def isSymmetric(self, root):
26+
"""
27+
:type root: TreeNode
28+
:rtype: bool
29+
"""
30+
if not root:
31+
return True
32+
return self.helper(root.left, root.right)
33+
34+
def helper(self, left, right):
35+
if not left and not right:
36+
return True
37+
if not left or not right or left.val != right.val:
38+
return False
39+
return self.helper(left.left, right.right) and self.helper(left.right, right.left)
40+
```
41+
**解法2**
42+
迭代
43+
```python
44+
# Definition for a binary tree node.
45+
# class TreeNode(object):
46+
# def __init__(self, x):
47+
# self.val = x
48+
# self.left = None
49+
# self.right = None
50+
51+
class Solution(object):
52+
def isSymmetric(self, root):
53+
"""
54+
:type root: TreeNode
55+
:rtype: bool
56+
"""
57+
if not root or not root.left and not root.right:
58+
return True
59+
if not root.left or not root.right:
60+
return False
61+
62+
queue1, queue2 = [root.left], [root.right]
63+
while queue1 and queue2:
64+
node1 = queue1.pop(0)
65+
node2 = queue2.pop(0)
66+
67+
if node1.val != node2.val:
68+
return False
69+
70+
if node1.left and node2.right:
71+
queue1.append(node1.left)
72+
queue2.append(node2.right)
73+
elif node1.left or node2.right:
74+
return False
75+
76+
if node1.right and node2.left:
77+
queue1.append(node1.right)
78+
queue2.append(node2.left)
79+
elif node1.right or node2.left:
80+
return False
81+
return True
82+
```

0 commit comments

Comments
 (0)