给定树的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。但这里的目的是找到非递归实现。
答案 0 :(得分:4)
想法是将树节点保持在来自预订遍历的堆栈中,直到在 inorder 遍历中找不到对应的节点。找到对方后,必须已经访问过节点左侧子树中的所有子节点。
以下是非递归 Java实现。
attrs.rotateIcon