已知二叉树的前序遍历序列为 ABDCEFG,中序遍历序列为 DBCAFEG,则后序遍历序列为 __ A. BDACEFG B. DCBFGEA C. ABCDEFG D. GFEDCBA
时间: 2024-06-02 22:09:46 浏览: 151
根据二叉树遍历的性质,我们可以先确定根节点,该二叉树的根节点为A。然后根据中序遍历序列,可以将树划分为左右子树。左子树的中序遍历序列为DBCA,前序遍历序列为BDAC,右子树的中序遍历序列为FEG,前序遍历序列为EFG。接下来,我们可以递归的求出左右子树的后序遍历序列。因此,该二叉树的后序遍历序列为DCBFGEA,所以选项B是正确的答案。
相关问题
已知二叉树的前序遍历序列为ABDCEFG,中序遍历序列是DBCAFEG,则其后序遍历序列为
根据二叉树遍历的性质,先求出二叉树的左右子树分布情况:
前序遍历:A B D C E F G
中序遍历:D B C A F E G
可以看出,根节点为A,因此左子树的前序遍历为B D,中序遍历为D B,右子树的前序遍历为C E F G,中序遍历为F E G。
将左右子树分别递归求解,直到子树为空,此时对应的后序遍历序列即为:
左子树的后序遍历序列:D B
右子树的后序遍历序列:F E G C
根节点的后序遍历序列:A
因此,整个二叉树的后序遍历序列为:DBFEGCA。
已知某二叉树前序遍历序列为 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;
}
```
阅读全文