在没有递归的情况下构造二进制树,并给出其顺序和前序遍历

时间:2018-01-20 04:12:38

标签: algorithm recursion tree iteration binary-tree

给定树的inorder和preorder遍历,如何以非递归方式重构树。

例如:

重新构建以下树

                     1
       2                             3
 4           5                6             7
                  8                     9

给定的

inorder遍历:4,2,5,8,1,6,3,9,7

预订遍历:1,2,4,5,8,3,6,7,9

注意:有许多对递归实现的引用。例如,可以参考Construct Tree from given Inorder and Preorder traversals。但这里的目的是找到非递归实现。

1 个答案:

答案 0 :(得分:4)

想法是将树节点保持在来自预订遍历的堆栈中,直到在 inorder 遍历中找不到对应的节点。找到对方后,必须已经访问过节点左侧子树中的所有子节点。

以下是非递归 Java实现。

attrs.rotateIcon