10大经典盈利模式 - 智慧园区
2025/12/19 0:13:45
由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。
现给出扩展二叉树的先序序列,要求输出其中序和后序序列。
扩展二叉树的先序序列。
输出其中序和后序序列。
ABD..EF..G..C..DBFEGAC DFGEBCA/* //先建树 顺序存储 #include <bits/stdc++.h> using namespace std; string a; struct node{ int l; int r; char data; node(){ l=r=0; } }tre[2000]; int ind=-1;//记录读取到a数组哪一个数 void midorder(int root){//中序遍历 if(tre[root].l!=0) midorder(root*2); if(tre[root].data!='.') cout<<tre[root].data; if(tre[root].r!=0) midorder(root*2+1); } void postorder(int root){//后序遍历 if(tre[root].l!=0) postorder(root*2); if(tre[root].r!=0) postorder(root*2+1); if(tre[root].data!='.') cout<<tre[root].data; } void build(int k){ ind++; if(ind>=a.size()) return; if(a[ind]=='.'){ tre[k].data='.'; return; } else{ tre[k].data=a[ind]; tre[k].l=k*2; build(k*2); tre[k].r=k*2+1; build(k*2+1); } } int main(){ cin>>a; build(1); midorder(1); cout<<endl; postorder(1); } */ //先建树 然后链式存储 #include <bits/stdc++.h> using namespace std; string a; struct node{ int l; int r; char data; node(){ l=r=0; } }tre[2000]; int ind=-1;//记录读取到a数组哪一个数 int ind2=1; void midorder(int root){//中序遍历 if(tre[root].l!=0) midorder(tre[root].l); if(tre[root].data!='.') cout<<tre[root].data; if(tre[root].r!=0) midorder(tre[root].r); } void postorder(int root){//后序遍历 if(tre[root].l!=0) postorder(tre[root].l); if(tre[root].r!=0) postorder(tre[root].r); if(tre[root].data!='.') cout<<tre[root].data; } void build(int k){ ind++; if(ind>=a.size()) return; if(a[ind]=='.'){ tre[k].data='.'; return; } else{ tre[k].data=a[ind]; tre[k].l=++ind2; build(ind2); tre[k].r=++ind2; build(ind2); } } int main(){ cin>>a; build(1); midorder(1); cout<<endl; postorder(1); }