先序序列构造二叉树
输入带空树的先序序列,空树用0表示,构造一棵二叉树
1 #include<iostream> 2 using namespace std; 3 4 typedef struct BiTNode{ 5 public: 6 int data; 7 struct BiTNode *lChild,*rChild; 8 }BiTNode,*BiTree; 9 10 bool preCreate(BiTree &p){ 11 int c; 12 cin>>c;//c=0表示空子树 13 if(!c) p=NULL; 14 else{ 15 p=new BiTNode; 16 p->data=c; 17 preCreate(p->lChild); 18 preCreate(p->rChild); 19 } 20 return true; 21 } 22 23 void InTraverse(const BiTree &T){ 24 if(T){ 25 InTraverse(T->lChild); 26 cout<<T->data<<" "; 27 InTraverse(T->rChild); 28 } 29 } 30 31 void deleteTree(BiTree &T){ 32 if(T){ 33 BiTree L,R; 34 L=T->lChild; 35 R=T->rChild; 36 delete T; 37 T=NULL; 38 deleteTree(L); 39 deleteTree(R); 40 } 41 } 42 43 int main(){ 44 cout<<"input nodes in preorder:"; 45 BiTree T; 46 preCreate(T); 47 cout<<"\nthe tree in inorder is "; 48 InTraverse(T); 49 deleteTree(T); 50 }

《数据结构(严)》p131算法6.4
疑问:换成带空树的中序或后序可以吗?
应该不可以,先序是从根往下递归,而中序和后序是先有子树再创建根,难递归,况且带空树的中序序列无法唯一确定一棵二叉树
Look, if you had one shot , one opportunity , to seize everything you ever wanted , in one moment.
Would you captrue it , or just let it slip ?

浙公网安备 33010602011771号