add 4 leetcodes · cxxpython9/AlgorithmsByPython@accc4fc · GitHub
Skip to content

Commit accc4fc

Browse files
add 4 leetcodes
1 parent d1f5468 commit accc4fc

6 files changed

Lines changed: 249 additions & 114 deletions

.idea/workspace.xml

Lines changed: 92 additions & 106 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Target Offer/把二叉树打印成多行.py

Lines changed: 4 additions & 5 deletions

leetcode/101. Symmetric Tree.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ def __init__(self, x):
2525
class Solution(object):
2626
# recursive
2727
def isSymmetric(self, root):
28-
return self.selfIsSymmetrical(root, root)
29-
def selfIsSymmetrical(self, pRoot1, pRoot2):
28+
return self._Symmetrical(root, root)
29+
def _Symmetrical(self, pRoot1, pRoot2):
3030
if pRoot1 and pRoot2:
31-
return pRoot1.val == pRoot2.val and self.selfIsSymmetrical(pRoot1.left, pRoot2.right) and self.selfIsSymmetrical(pRoot1.right, pRoot2.left)
31+
return pRoot1.val == pRoot2.val and self._Symmetrical(pRoot1.left, pRoot2.right) and self._Symmetrical(
32+
pRoot1.right, pRoot2.left)
3233
else:
3334
return pRoot1 == pRoot2
3435

@@ -43,6 +44,21 @@ def isSymmetric2(self, root):
4344
else:
4445
now = [j for i in now if i for j in (i.left, i.right)]
4546
return True
47+
# modify iterative(BFS)
48+
def isSymmetric_2(self, root):
49+
if root:
50+
nodeStack = [root]
51+
while nodeStack:
52+
vals = [node.val if node else None for node in nodeStack]
53+
if list(reversed(vals)) != vals:
54+
return False
55+
else:
56+
preStack = [node for node in nodeStack if node]
57+
nodeStack = []
58+
for preNode in preStack:
59+
nodeStack.append(preNode.left)
60+
nodeStack.append(preNode.right)
61+
return True
4662

4763
# iterative(DFS)
4864
def isSymmetric3(self, root):
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
'''
2+
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
3+
4+
For example:
5+
Given binary tree [3,9,20,null,null,15,7],
6+
3
7+
/ \
8+
9 20
9+
/ \
10+
15 7
11+
return its level order traversal as:
12+
[
13+
[3],
14+
[9,20],
15+
[15,7]
16+
]
17+
'''
18+
# Definition for a binary tree node.
19+
class TreeNode(object):
20+
def __init__(self, x):
21+
self.val = x
22+
self.left = None
23+
self.right = None
24+
25+
class Solution(object):
26+
def levelOrder(self, root):
27+
if not root:
28+
return []
29+
res, level = [], [root]
30+
while level:
31+
res.append([node.val for node in level])
32+
temp = []
33+
for node in level:
34+
temp.extend([node.left, node.right])
35+
level = [node for node in temp if node]
36+
return res
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
'''
2+
Given preorder and inorder traversal of a tree, construct the binary tree.
3+
'''
4+
class TreeNode(object):
5+
def __init__(self, x):
6+
self.val = x
7+
self.left = None
8+
self.right = None
9+
10+
class Solution(object):
11+
# recursion
12+
def buildTree(self, preorder, inorder):
13+
if not preorder or not inorder:
14+
return
15+
root = TreeNode(preorder[0])
16+
ind = inorder.index(preorder.pop(0))
17+
root.left = self.buildTree(preorder, inorder[0:ind])
18+
root.right = self.buildTree(preorder, inorder[ind + 1:])
19+
return root
20+
# method2, faster!!
21+
def buildTree2(self, preorder, inorder):
22+
self.Ind = 0
23+
ind = {val: ind for ind, val in enumerate(inorder)}
24+
head = self.build(0, len(preorder) - 1, preorder, inorder, ind)
25+
return head
26+
27+
def build(self, start, end, preorder, inorder, ind):
28+
if start <= end:
29+
mid = ind[preorder[self.Ind]]
30+
self.Ind += 1
31+
root = TreeNode(inorder[mid])
32+
root.left = self.build(start, mid - 1, preorder, inorder, ind)
33+
root.right = self.build(mid + 1, end, preorder, inorder, ind)
34+
return root
35+
# Interative
36+
def buildTreeInter(self, preorder, inorder):
37+
if len(preorder) == 0:
38+
return None
39+
40+
head = TreeNode(preorder[0])
41+
stack = [head]
42+
preInd, inInd = 1, 0
43+
44+
while preInd < len(preorder):
45+
temp = None
46+
node = TreeNode(preorder[preInd])
47+
while stack and stack[-1].val == inorder[inInd]:
48+
temp = stack.pop()
49+
inInd += 1
50+
if temp:
51+
temp.right = node
52+
else:
53+
stack[-1].left = node
54+
stack.append(node)
55+
preInd += 1
56+
57+
return head
Lines changed: 41 additions & 0 deletions

0 commit comments

Comments
 (0)