、已知前序和中序,求后序遍历:
前序:ABDECFG 中序:DBEAFCG
思路简单:前序的第一个节点就是根节点,
中序中找到根节点的位置,根节点之前是其左子树,之后是右子树
按此顺序,依次在左子树部分遍历,右子树部分遍历
C++ 代码:将后序遍历保存输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
TreeNode *BinaryTreeFormorderings(
char
*Preorder,
char
*Inorder,
int
len)
{
if
(len == 0)
return
NULL;
TreeNode *node=
new
TreeNode;
node->val=*Preorder;
int
rootIndex=0;
while
(rootIndex<len)
{
if
(Inorder[rootIndex] == *Preorder)
break
;
++rootIndex;
}
node->left = BinaryTreeFormorderings(Preorder+1, Inorder, rootIndex);
node->right = BinaryTreeFormorderings(Preorder+rootIndex+1,Inorder+rootIndex+1,len-(rootIndex+1));
cout<<node->val;
return
node;
}
|
注:上述代码,其实是在遍历的过程中建立了一个二叉树并返回,这是最全的。如果只是要个后续遍历的序列,可以在输出哪里以一个vector来存放序列就可以了,没必要建立二叉树的。如果只是要输出后续遍历,则在最后哪里输出就可以了,也没必要保存这个vector了。