已知二叉树先序遍历中序遍历求其后序遍历、重建二叉树
已知二叉树先序遍历中序遍历求其后序遍历 (注:已知中序遍历序列和剩下两种遍历序列中的一种都可以确定二叉树,即可得到另一种遍历序列, 但是已知前序遍历和后序遍历序列并不能唯一确定二叉树,例如:preorder:AB postorder:BA,我们不能确定B是A的左子还是右子。) 二叉树的先序遍历的第一个元素总是树的根结点,而在中序遍历中,根结点在序列的中间,其左右两边分别是根结点的左右子树。 因此我们可以根据先序遍历确定根结点,然后在中序遍历中扫描根结点,同时可得到左右子树的中序遍历和先序遍历,递归此过程,即可获得二叉树的所有结点。 而后序遍历即为根结点左子树的后序遍历+右子树的后序遍历+根结点。 递归实现思路非常简单,C++代码: string getpostorder(char* preorder, char* inorder, int length){ string str = ""; char* rootInorder; //根结点在中序遍历中的位置 int leftlength; //左子树长度 if (length <= 0||preorder==NULL||inorder==NULL)//递归边界条件 return ""; else{ leftlength = 0; rootInorder = inorder; //扫描根结点 while (leftlength <