已知二叉树的前序遍历序列是AEFBGCDHIKJ,中序遍历序列是EFAGBCHKIJD,画出此 二叉树
时间: 2023-06-21 20:04:27 浏览: 463
我们可以根据前序遍历和中序遍历的规律来构造这棵二叉树:
1. 前序遍历的第一个元素是根节点,即A。
2. 在中序遍历中,根节点A左侧的所有元素都属于左子树,右侧的所有元素都属于右子树。
3. 由于前序遍历的第二个元素是左子树的根节点,所以我们可以得到左子树的前序遍历序列为EFBG,中序遍历序列为EFGABC.
4. 由于前序遍历的第六个元素是右子树的根节点,所以我们可以得到右子树的前序遍历序列为CDHIKJ,中序遍历序列为CHKIGDJB。
根据上述规律,我们可以递归构造出这棵二叉树,如下图所示:
```
A
/ \
/ \
E C
/ \ / \
F B H K
/ \
G J
\
D
```
其中,蓝色节点表示前序遍历序列中的节点,红色节点表示中序遍历序列中的节点。
相关问题
已知某二叉树前序遍历序列为 ABDFECGHI 中序遍历序列为 DBEFAGHCI 确定该二叉树结构并画出该二叉树。
已知某二叉树前序遍历序列为 ABDFECGHI,中序遍历序列为 DBEFAGHCI。该二叉树的结构如下所示:
```
A
/ \
B C
/ \ \
D E G
/ / \
F H I
```
建树的C++代码实现如下所示:[^1]
```c++
#include<iostream>
#include<cstring>
using namespace std;
struct node{
char data;
node* l;
node* r;
};
node* build(char* pre,char* in,int len){
node* root(new node);
memset(root,0,sizeof(node));
if(len==0) return nullptr;
root->data=*pre;
int pos=find(in,in+len,*pre)-in;//查找根节点在中序遍历中的位置
root->l=build(pre+1,in,pos);//递归构建左子树
root->r=build(pre+1+pos,in+pos+1,len-pos-1);//递归构建右子树
return root;
}
void postorder(node* root){//后序遍历打印
if(root==nullptr) return;
postorder(root->l);
postorder(root->r);
cout<<root->data;
}
int main(){
char pre[]="ABDFECGHI";
char in[]="DBEFAGHCI";
node* root=build(pre,in,strlen(pre));
postorder(root);
return 0;
}
```
已知一个二叉树的前序遍历序列和中序遍历序列,求其后序遍历序列。
这是一个经典的二叉树遍历问题。可以通过递归的方式进行解决。具体步骤如下:
1. 首先根据前序遍历序列,确定根节点。
2. 然后在中序遍历序列中,找到该根节点的位置。该位置左侧为该根节点的左子树,右侧为其右子树。
3. 根据中序遍历序列中左右子树的大小关系,可以在前序遍历序列中确定该根节点的左右子节点。
4. 递归地处理该根节点的左子树和右子树,直到最后一个叶子节点为止。
5. 最后根据左右子树的顺序,得到该二叉树的后序遍历序列。
需要注意的是,如果该二叉树为空,那么后序遍历序列也为空。
阅读全文