已知先序和中序得出后序

、已知前序和中序,求后序遍历:

前序: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了。

猜你喜欢

转载自blog.csdn.net/asdasdasdasasd1111/article/details/81052239