当前位置: 首页 > 知识库问答 >
问题:

如何从顺序和后序遍历迭代地构造二叉树?

焦宁
2023-03-14

从顺序和后序遍历迭代构造二叉树。

我已经了解了如何使用递归,但我正在寻找一个迭代构造二叉树的答案。

我为inorder和preorder编写了一个算法,但我想知道如何修改inorder和postorder的算法?

注意:它是伪代码,“=”意味着“==”

节点:

e: TElement
right: PNode (pointer to a Node)
left: PNode (pointer to a Node)

二叉树:

root: PNode

子算法树(前序、有序)

pre:preorder:Int[],inoorder:Int[]

preOrderIndex<- 0;
inOrderIndex<-0;

Stack(s) 
root <- createNode(preorder[0])
push(s, root)

preOrderIndex<-preOrderIndex +1

While !empty(s)
    element(s, top) //which is the same as top = peak(s)
    
    if [top].e = inorder[inOrderIndex] 
        delete(s, top) //delete the element from the stack
        inOrderIndex<-inOrderIndex +1
    
        if inOrderIndex = length(inorder) 
            
            return root
        End if
        
        element(s, elem) 
        
        if !empty(s) and [elem].e = inorder[inOrderIndex]
            continue
        End if
        
       
        nod <- createNode(preorder[preOrderIndex])
        [top].right<-nod
        preOrderIndex<-preOrderIndex +1
        push(s,nod)
    Else
        nod <- createNode(preorder[preOrderIndex])
        [top].left<-nod
        preOrderIndex<-preOrderIndex +1
        push(s,nod)
    End if
End while

return root

末端子算法

编辑:我找到了答案

共有1个答案

戴凯歌
2023-03-14

当您有一个给定前序和顺序遍历的工作解决方案时,您可以使用以下观察结果将其转化为给定后序和顺序遍历的解决方案:

>

  • 逆序遍历与镜像树的逆序遍历相同(左、右交换)

    后序遍历的反向等于镜像树的前序遍历

    因此,对工作算法进行以下更改:

    • 重命名prepost出现在变量名中的任何地方
    • 初始化postOrderIndexinOrderIndex长度(inorder)-1
    • 用递减语句替换递增语句
    • 将退出条件替换为if inOrderIndex

  •  类似资料:
    • 下面是将二叉查找树的前序遍历转换为原始树的代码。 下面的代码采用整数数组,表示二进制搜索树的预序遍历。返回构造树的根。 来源:http://www . geeks forgeeks . org/construct-BST-from-given-preorder-traversal-set-2/ 我无法理解此代码。有人能帮我理解以下内容吗 > 在任何给定的迭代中,堆栈中存储的值与指出的当前值相关 从

    • 我花了几个小时试图弄清楚为什么它不会在最后打印根节点。 它无法

    • 我在编码挑战中遇到了一个问题。 完整二叉树是一种二叉树,其中除叶节点外的每个节点都有两个子节点,且树的最后一级边高度有叶节点。 您的任务很简单,给定完整二叉树的遍历,请按顺序遍历打印其

    • 我想对二叉树执行级别顺序遍历。因此,对于给定的树,说: 产出将是: 我知道我可以使用某种队列,但在C中递归地实现这一点的算法是什么?感谢您的帮助。

    • 我尝试按如下方式执行二叉树的垂直顺序遍历:1)找出每个节点与根节点之间的最小和最大水平距离2)创建一个hashmap,将水平距离映射到相应的节点(Map) 然而,我得到了不想要的输出,我认为在实现中有一些错误,因为算法对我来说似乎是正确的。 以下是完整的代码: 输出:{-1=[99999],0=[99999,12],-2=[99999],1=[99999],2=[99999]}那么我的apProc

    • 二叉树遍历崩溃求大神帮我分析分析 以下是我同学的代码可以跑 实在是看不出哪里有什么不同