二叉搜索树的第k个结点:
# 因为二叉搜索树,故中序遍历后,结果为排序好的List
class Solution:
# 返回对应节点TreeNode
def KthNode(self, pRoot, k):
# write code here
if not pRoot:
return None
self.res = []
self.midTrave(pRoot)
return self.res[k-1] if 0<k<=len(self.res) else None
def midTrave(self,pRoot):
if not pRoot:
return None
self.midTrave(pRoot.left)
self.res.append(pRoot)
self.midTrave(pRoot.right)
序列化二叉树
# 后序打印,后序重建
class Solution:
# 序列化:即将一颗树打印成列表,前序/中序/后序/层次都可
def Serialize(self, root):
# write code here
if not root:
return '#'
return str(root.val)+ ',' + self.Serialize(root.left) + ',' + self.Serialize(root.right)
# 给一个列表进行重建
def Deserialize(self, s):
# write code here
list = s.split(',')
return self.deserializeTree(list)
def deserializeTree(self,list):
if len(list) <= 0:
return None
val = list.pop(0)
root = None
if val != '#':
root = TreeNode(int(val))
root.left = self.deserializeTree(list)
root.right = self.deserializeTree(list)
return root
把二叉树打印成多行:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
if not pRoot:
return []
res = []
nodes = [pRoot]
while nodes:
curStack = []
nextStack = []
for node in nodes:
curStack.append(node.val)
if node.left:
nextStack.append(node.left)
if node.right:
nextStack.append(node.right)
res.append(curStack)
nodes = nextStack
return res