#jx1001. 二叉树进阶
二叉树进阶
一、先序中序构建树
#include<iostream>
using namespace std;
string pre,mid;
struct node{
char data;
int left,right;//左右孩子编号
}BTree[30];
int p=0;
//根据先序和中序序列构造树
int getTree(int pl,int pr,int ml,int mr){
if(pl>pr) return -1;
int t=p++;
BTree[t].data=____(1)_____;
int i=ml;
while(i<=mr&&mid[i]!=pre[pl]) i++;
//计算左子树的长度
int len=____(2)_____;
//构建左右子树
BTree[t].left=getTree(pl+1,____(3)_____,ml,i-1);
BTree[t].right=getTree(___(4)____,___(5)____,i+1,mr);
return t;
}
int main(){
cin>>pre>>mid;
int n=pre.size();
int root=getTree(0,n-1,0,n-1);
cout<<"二叉树的结点数:"<<p;
return 0;
}
第 1 题
(1)处填写{{ input(1) }}
第 2 题
(2)处填写{{ input(2) }}
第 3 题
(3)处填写{{ input(3) }}
第 4 题
(4)处填写{{ input(4) }}
第 5 题
(5)处填写{{ input(5) }}
二、扩展先序序列构建树后求中序序列和后序序列
问题描述
将二叉树的空结点用“·”补齐后,就得到原二叉树的扩展二叉树,如图所示。我请根据扩展二叉树的先序序列构建出一棵二叉树,然后输出这棵二叉树其中序和后序序列。
输入格式
一棵扩展二叉树的先序序列,字符只包含大写字母和“.”,空结点用“.”表示。总长度不超过53。
输出格式
共两行。第一行是二叉树的中序序列;第二行是二叉树的后序序列。
输入样例
ABD..EF..G..C..
输出样例
DBFEGAC
DFGEBCA
#include<iostream>
using namespace std;
struct node{
char data;
int left,right;
}BTree[53];
//扩展先序序列建树
char s[53];//扩展先序序列
int i=0;//先序遍历序列首字符下标
int p=0;//存储结点时,可用数组的下标
int createTree(){
char c=s[i];
i++;
if(____(1)____) return -1;
//存储根节点
int t=p++;
BTree[t].data=____(2)____;
//构建左右子树
BTree[t].left=createTree();
_______(3)__________;
return t;
}
//中序遍历
void inOrder(int root){
if(root>=0){
inOrder(BTree[root].left);
cout<<BTree[root].data;
inOrder(BTree[root].right);
}
}
//后序遍历
void postOrder(int root){
if(root>=0){
postOrder(BTree[root].left);
_______(4)__________;
_______(5)__________;
}
}
int main(){
cin>>s;
int root=createTree();
inOrder(root);
cout<<endl;
postOrder(root);
return 0;
}
第 6 题
(1)处填写( ) {{ select(6) }}
- c=='#'
- c==-1
- c=='.'
- c
第 7 题
(2)处填写( ) {{ select(7) }}
- c
- p
- t
- i
第 8 题
(3)处填写( ) {{ select(8) }}
- BTree[t].left=createTree()
- BTree[t].right=createTree()
- createTree()
- BTree[t].data=createTree()
第 9 题
(4)处填写( ) {{ select(9) }}
- postOrder(BTree[root].right)
- cout<<BTree[root].data
- postOrder(BTree[root].data)
- inOrder(BTree[root].right)
第 10 题
(5)处填写( ) {{ select(10) }}
- postOrder(BTree[root].right)
- cout<<BTree[root].data
- postOrder(BTree[root].data)
- inOrder(BTree[root].right)
相关
在以下作业中: