已知一棵二叉树的前序遍历的结果为ABCDEF,中序遍历的结果为CBAEDF,试画出此二叉树。
时间: 2023-11-19 15:58:13 浏览: 415
我们可以通过前序遍历的第一个字符确定根节点,然后在中序遍历中找到该字符,将中序遍历分成左右两个子树,分别递归构建左右子树。
在本题中,根节点为A,中序遍历中A的左侧是CBA,右侧是EDF,因此可以得到下面的二叉树:
```
A
/ \
B C
/ \
E D
\ /
F F
```
其中,红色表示前序遍历的第一个字符,蓝色表示根节点,绿色表示左子树,黄色表示右子树。
相关问题
已知一棵二叉树前序遍历的结果ABECDFGHIJ,中序遍历的结果EBCDAFHIGJ,试画出这棵二叉树
以下是已知一棵二叉树前序遍历的结果ABECDFGHIJ,中序遍历的结果EBCDAFHIGJ所画出的二叉树:
```
A
/ \
B C
/ / \
E F G
/ \ \
D H I
\
J
```
已知某二叉树前序遍历序列为 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;
}
```
阅读全文