先序序列构造二叉树

输入带空树的先序序列,空树用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

 

疑问:换成带空树的中序或后序可以吗?

应该不可以,先序是从根往下递归,而中序和后序是先有子树再创建根,难递归,况且带空树的中序序列无法唯一确定一棵二叉树

 

posted @ 2021-03-30 09:44  NoerForest  阅读(714)  评论(0)    收藏  举报