Advertisement

二叉树先序中序后序遍历重建 先序中序后序遍历重建二叉树

阅读量:

基于任意两种遍历序列都可以重建二叉树吗?

【答案是否定的。唯有“先+中”与“后+中”的组合能够实现重建,而“先+后”则无法完成重建过程

原因在于:
先序遍历与后序遍历的核心优势在于能够明确根节点的位置(分别位于序列的起始或末尾),随后结合中序遍历可确定左右子树的规模,从而实现递归分割处理。然而,“先+后”组合虽同样具备识别根节点的能力,却无法进一步区分左右子树的边界,因此在保持线性时间复杂度的前提下,该问题无解。

重建二叉树和二叉树的反序列化有何区别?

二叉树的序列化过程中对“空节点”进行了特殊标识,而普通的遍历序列由于未包含空节点的相关信息,因此仅凭单一序列无法完成二叉树的重构,必须借助双序列才能实现。

依据《[算法][面试]二叉树的序列化与反序列化(bfs|先序、后序)》我们已知其仅可在先序、后序 的相关方法,在仅使用遍历序列的情况下进行反序列化操作。

代码:

复制代码
    def rebuild_pre_in(preorder: List[int], inorder: List[int]) -> TreeNode or None:
    # 从前序和中序复原二叉树
    if len(preorder) == 0:
        return N

全部评论 (0)

还没有任何评论哟~