二叉链表生成二叉树

来源:互联网 发布:家谱制作软件下载 编辑:程序博客网 时间:2024/06/16 00:40

把例程敲一遍       才对二叉树有了个基本的认识    

完整正确例程:

[cpp] view plain copy
  1. #include <iostream>  
  2. #include<stdlib.h>  
  3. using namespace std;  
  4. //二叉树出的二叉链表结构定义  
  5. struct bitnode  
  6. {  
  7.     char data;  
  8.     bitnode *lchild,*rchild;  
  9.   
  10. };  
  11.   
  12.   
  13.   
  14. bitnode *t;  
  15. //bitree==*bitnode  
  16. //前序遍历递归  
  17. void preordertraverse(bitnode *t)  
  18. {  
  19.     if(t==NULL)  
  20.         return ;  
  21.     cout<<t->data;  
  22.     preordertraverse(t->lchild);  
  23.     preordertraverse(t->rchild);  
  24. }  
  25.   
  26. //二叉树的中序遍历递归  
  27. void inordertraverse(bitnode *t)  
  28. {  
  29.     if(t==NULL)  
  30.         return ;  
  31.     inordertraverse(t->lchild);  
  32.     cout<<t->data;  
  33.   
  34.     inordertraverse(t->rchild);  
  35. }  
  36. //二叉树后序遍历递归  
  37. void postordertraverse(bitnode *t)  
  38. {  
  39.     if(t==NULL)  
  40.         return ;  
  41.     postordertraverse(t->lchild);  
  42.     postordertraverse(t->rchild);  
  43.     cout<<t->data;  
  44. }  
  45. //按前序输入二叉树中结点的值(一个字符)  
  46. //#表示空树,构造二叉链表表示二叉树t《大话数据结构》  
  47.   
  48. void createbitree(bitnode *(*t))  
  49. {  
  50.     char ch;  
  51.   
  52.     cin>>ch;  
  53.     if(ch=='#')  
  54.         (*t)=NULL;  
  55.     else  
  56.     {  
  57.         (*t)=new bitnode;  
  58.         //if(!t)  
  59.            // exit(0);  
  60.   
  61.         (*t)->data=ch;  
  62.         createbitree(&(*t)->lchild);//构造左子树  
  63.         createbitree(&(*t)->rchild);//构造右子树  
  64.     }  
  65. }  
  66.   
  67.   
  68. int main()  
  69. {  
  70.       
  71.         cout<<"请输入全部结点(空指针用#代替):"<<endl;  
  72.     createbitree(&t);  
  73.     cout<<"\n\n先序遍历"<<endl;  
  74.     inordertraverse(t);  
  75.         cout<<"\n中序遍历"<<endl;  
  76.     preordertraverse(t);  
  77.         cout<<"\n后序遍历"<<endl;  
  78.     postordertraverse(t);  
  79.  cout<<endl;  
  80.     return 0;  
  81. }  

下面是运行结果:


错误的建树函数:

错误原因是:参数有单向传递的特点,修改后的data无法传递到主函数中

[cpp] view plain copy
  1. void createbitree(bitnode *t)  
  2. {  
  3.     char ch;  
  4.   
  5.     cin>>ch;  
  6.     if(ch=='#')  
  7.         t=NULL;  
  8.     else  
  9.     {  
  10.         t=new bitnode;  
  11.         //if(!t)  
  12.            // exit(0);  
  13.   
  14.         t->data=ch;  
  15.         createbitree(t->lchild);//构造左子树  
  16.         createbitree(t->rchild);//构造右子树  
  17.     }  
  18. }*/  


修改指针的值:二级指针,引用,返回值(返回修改后的指针)

[cpp] view plain copy
  1. ////////////////////1传引用/////////////////////////////  
  2.   
  3.   /*在主函数中定义树,然后传到createbitree中 
  4. void createbitree(bitnode &t) 
  5. { 
  6.     char ch; 
  7.  
  8.     cin>>ch; 
  9.     if(ch=='#') 
  10.         t=NULL; 
  11.     else 
  12.     { 
  13.         t=new bitnode; 
  14.         //if(!t) 
  15.            // exit(0); 
  16.  
  17.         t->data=ch; 
  18.         createbitree(t->lchild);//构造左子树 
  19.         createbitree(t->rchild);//构造右子树 
  20.     } 
  21. } 
  22. main函数中改为:createbitree(t); 
  23.   
  24.  2 //////////////////返回值////////////////////////////////: 
  25.  
  26.   /*直接在函数中定义树; 
  27. bitnode * createbitree() 
  28. { 
  29.    bitnode *t; 
  30.     char ch; 
  31.  
  32.     cin>>ch; 
  33.     if(ch=='#') 
  34.         t=NULL; 
  35.     else 
  36.     { 
  37.         t=new bitnode; 
  38.         //if(!t) 
  39.            // exit(0); 
  40.  
  41.         t->data=ch; 
  42.         createbitree(t->lchild);//构造左子树 
  43.         createbitree(t->rchild);//构造右子树 
  44.  
  45.   } 
  46.   return t; 
  47. } 
  48.  
  49.   主函数:createbitree(); 
  50.  
  51.  
  52. */  
  53.   
  54. //按前序输入二叉树中结点的值(一个字符)  
  55. //#表示空树,构造二叉链表表示二叉树t《大话数据结构》  
  56. void createbitree(bitnode *(*t))  
  57. {  
  58.     char ch;  
  59.   
  60.     cin>>ch;  
  61.     if(ch=='#')  
  62.        (*t)=NULL;  
  63.     else  
  64.     {  
  65.         (*t)=new bitnode;  
  66.         //if(!t)  
  67.            // exit(0);  
  68.   
  69.         (*t)->data=ch;  
  70.         createbitree(&(*t)->lchild);//构造左子树  
  71.         createbitree(&(*t)->rchild);//构造右子树  
  72.     }  
  73. }  
0 0
原创粉丝点击