指针二叉树中序先序转后序
时间: 2023-10-13 17:07:15 浏览: 93
二叉树前序中序出后序
指针二叉树的中序遍历顺序是:左子树、根节点、右子树。
指针二叉树的先序遍历顺序是:根节点、左子树、右子树。
指针二叉树的后序遍历顺序是:左子树、右子树、根节点。
因此,如果已知指针二叉树的中序遍历和先序遍历,可以通过递归的方式转换成后序遍历:
1. 首先,先序遍历的第一个节点是根节点,将其加入后序遍历序列中。
2. 在中序遍历中,找到根节点的位置,将其左边的节点看作左子树,在左子树中递归执行上述步骤,直到左子树为空。
3. 然后,将根节点的右子树看作新的指针二叉树,重复执行上述步骤。
4. 最后,将根节点加入后序遍历序列中,得到最终的后序遍历序列。
下面是一个示例代码,实现了指针二叉树的中序先序转后序:
```c++
#include<iostream>
using namespace std;
typedef struct BiTNode{//定义二叉树结构体
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void PreInToPost(BiTree T){//中序先序转后序函数
if (T == NULL) return;
PreInToPost(T->lchild);//遍历左子树
PreInToPost(T->rchild);//遍历右子树
cout << T->data << " ";//输出根节点
}
BiTree CreateBiTree(){//创建二叉树函数
char ch;
cin >> ch;
if (ch == '#') return NULL;
BiTree T = new BiTNode;
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
return T;
}
int main(){
BiTree T;
cout << "请输入二叉树的先序遍历序列,其中'#'表示空节点:" << endl;
T = CreateBiTree();
cout << "该二叉树的后序遍历为:" << endl;
PreInToPost(T);
cout << endl;
return 0;
}
```
阅读全文