python 已经知道前序和中序恢复二叉树

class TreeNode():
    def __init__(self,val,left=None,right=None):
        self.val=val
        self.left=left
        self.right=right
def pre_print(root):#前序遍历二叉树输出
    if root==None:
        return
    else:
        print(root.val,end=" ")
        pre_print(root.left)
        pre_print(root.right)
def restruct_tree(pre_order, in_order):#恢复二叉树
    # 排出两种特殊情况
    if len(pre_order) == 0:
        return None
    elif len(in_order) == 1:
        return TreeNode(in_order[0])
    else:
        root = pre_order[0]
        depth = in_order.index(root)
        temp = TreeNode(root)
        temp.left = restruct_tree(pre_order[1: depth + 1], in_order[: depth])
        temp.right = restruct_tree(pre_order[depth + 1:], in_order[depth + 1:])
    return temp
pre_order=['A','B','C','D','E','F','G']#前序
in_order=['C','B','D','A','E','G','F']#中序
temp=restruct_tree(pre_order,in_order)
pre_print(temp)


输出结果:
A B C D E F G 

  

posted @ 2019-10-18 16:53  bigsmart  阅读(530)  评论(0)    收藏  举报