重建二叉树
class TreeNode():
def __init__(self,val):
self.val = val
self.left = None
self.right = None
self.pre_list = []
self.mid_list = []
self.post_list = []
'''
前序遍历
'''
def pre_order(self,root):
if root is None:
return
else:
self.pre_list.append(root.val)
self.pre_order(root.left)
self.pre_order(root.right)
'''
中序遍历
'''
def mid_order(self,root):
if root is None:
return
else:
self.mid_order(root.left)
self.mid_list.append(root.val)
self.mid_order(root.right)
'''
后序遍历
'''
def post_order(self, root):
if root is None:
return
else:
self.post_order(root.left)
self.post_order(root.right)
self.post_list.append(root.val)
'''
重建二叉树
'''
class Solution:
def reConstructBinaryTree(self, pre, tin):
if not pre or not tin:
return None
root = TreeNode(pre.pop(0))
index = tin.index(root.val)
root.left = self.reConstructBinaryTree(pre, tin[:index])
root.right = self.reConstructBinaryTree(pre, tin[index + 1:])
return root
if __name__ == '__main__':
pre = [1,2,3,4,5,6,7]
tin = [3,2,4,1,6,5,7]
sol = Solution()
root = sol.reConstructBinaryTree(pre,tin)
root.pre_order(root)
print(root.pre_list)
root.mid_order(root)
print(root.mid_list)
root.post_order(root)
print(root.post_list)
输出
[1, 2, 3, 4, 5, 6, 7]
[3, 2, 4, 1, 6, 5, 7]
[3, 4, 2, 6, 7, 5, 1]