Skip to content

Commit 0da3829

Browse files
ch8
1 parent 45b3037 commit 0da3829

6 files changed

Lines changed: 272 additions & 66 deletions

.idea/workspace.xml

Lines changed: 56 additions & 66 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
'''
2+
给定一颗二叉搜索树,请找出其中的第k大的结点。例如,
3+
5
4+
/ \
5+
3 7
6+
/\ /\
7+
2 4 6 8 中,
8+
按结点数值大小顺序第三个结点的值为4。
9+
'''
10+
11+
# -*- coding:utf-8 -*-
12+
class TreeNode:
13+
def __init__(self, x):
14+
self.val = x
15+
self.left = None
16+
self.right = None
17+
class Solution:
18+
# 返回对应节点TreeNode
19+
def __init__(self):
20+
self.treeNode = []
21+
def preOrder(self, pRoot):
22+
if len(self.treeNode) < 0:
23+
return None
24+
if pRoot.left:
25+
self.preOrder(pRoot.left)
26+
self.treeNode.append(pRoot)
27+
if pRoot.right:
28+
self.preOrder(pRoot.right)
29+
def KthNode(self, pRoot, k):
30+
if k == 0 or pRoot == None:
31+
return
32+
self.preOrder(pRoot)
33+
if len(self.treeNode) < k:
34+
return None
35+
return self.treeNode[k-1]

Target Offer/序列化二叉树.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'''
2+
请实现两个函数,分别用来序列化和反序列化二叉树。这里没有规定序列化的方式。
3+
'''
4+
5+
# -*- coding:utf-8 -*-
6+
class TreeNode:
7+
def __init__(self, x):
8+
self.val = x
9+
self.left = None
10+
self.right = None
11+
class Solution:
12+
def Serialize(self, root):
13+
serializeStr = ''
14+
if root == None:
15+
return '#'
16+
stack = []
17+
while root or stack:
18+
while root:
19+
serializeStr += str(root.val) + ','
20+
stack.append(root)
21+
root = root.left
22+
serializeStr += '#,'
23+
root = stack.pop()
24+
root = root.right
25+
serializeStr = serializeStr[:-1]
26+
return serializeStr
27+
28+
def Deserialize(self, s):
29+
serialize = s.split(',')
30+
tree, sp = self.deserialize(serialize, 0)
31+
return tree
32+
33+
def deserialize(self, s, sp):
34+
if sp >= len(s) or s[sp] == '#':
35+
return None, sp + 1
36+
node = TreeNode(int(s[sp]))
37+
sp += 1
38+
node.left, sp = self.deserialize(s, sp)
39+
node.right, sp = self.deserialize(s, sp)
40+
return node, sp
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'''
2+
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
3+
'''
4+
5+
# -*- coding:utf-8 -*-
6+
class TreeNode:
7+
def __init__(self, x):
8+
self.val = x
9+
self.left = None
10+
self.right = None
11+
class Solution:
12+
# 返回二维列表[[1,2],[4,5]]
13+
def Print(self, pRoot):
14+
if pRoot == None:
15+
return []
16+
nodes = []
17+
tempNodes = []
18+
result = []
19+
nodes.append(pRoot)
20+
while nodes:
21+
levelResult = []
22+
for node in nodes:
23+
levelResult.append(node.val)
24+
if node.left != None:
25+
tempNodes.append(node.left)
26+
if node.right != None:
27+
tempNodes.append(node.right)
28+
result.append(levelResult)
29+
nodes = tempNodes
30+
tempNodes = []
31+
return result

0 commit comments

Comments
 (0)