树的非递归

 

Code:
  1. // 数据结构.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3. #include "stdafx.h"  
  4. #include <iostream>  
  5. using namespace std;  
  6. typedef char ElemType;  
  7.   
  8.   
  9. typedef struct Lnode  
  10.   {  
  11.     struct Bitnode* Tree;//啊   
  12.     struct Lnode*next;  
  13.    }Lnode,*linkstack;//栈  
  14. typedef struct Bitnode  
  15.   {  
  16.      ElemType data;  
  17.     struct Bitnode *lchild,*rchild;  
  18.   }Bitnode,*BitTree;//树  
  19.   
  20.   
  21. /******栈********* 
  22. _______________*/  
  23. int initstack(linkstack &s)//建立空栈  
  24. {  
  25.     s=new Lnode;  
  26.     s->next=NULL;//#  
  27.     return 1;  
  28.     }  
  29. int Empty_stack(linkstack s)  
  30. {if (s->next==NULL)return 1;  
  31. else return 0;  
  32. }  
  33. int push(linkstack s,BitTree T)  
  34. {linkstack p;  
  35.  p=new Lnode;  
  36.  if(!p){cout<<"分配内存失败"<<endl;return 0;}  
  37.  p->Tree=T;  
  38.  p->next=s->next;//##  
  39.  s->next=p;  
  40.  return 1;  
  41.     }  
  42. int pop(linkstack s,BitTree &p)//这样用pop(,);  
  43. {linkstack temp;  
  44. if(Empty_stack(s)){cout<<"栈空了"<<endl;return 0;}  
  45. temp=s->next;  
  46. p=temp->Tree;  
  47. s->next=temp->next;//他妈的错了  
  48. free(temp);  
  49. return 1;  
  50.     }  
  51. int get_top(linkstack s,BitTree &p)  
  52. {if(s->next==NULL){return 0;}  
  53. else {p=s->next->Tree;return 1;}  
  54. }  
  55. void l_display(linkstack s)  
  56. {while(s->next!=NULL)  
  57.   {s=s->next;  
  58. if(s->Tree!=NULL)  
  59.    cout<<s->Tree->data;  
  60.   }  
  61. }  
  62.   
  63. /******树********/  
  64. int CreatB_Tree(BitTree &T)  
  65. {  
  66.  ElemType ch;  
  67.  ch=getchar();//  
  68.  if(ch==' ')T=NULL;  
  69. else  
  70.  {if(!(T=new Bitnode))cout<<"Error!"<<endl;  
  71.   T->data=ch;  
  72.   CreatB_Tree(T->lchild);  
  73.   CreatB_Tree(T->rchild);  
  74.   }  
  75. return 1;  
  76. }  
  77. /*************非递归 *******先序***************/  
  78. int Pre_Order_B_Tree(BitTree T)  
  79. {    
  80.     BitTree p;  
  81.     linkstack s;  
  82.     initstack(s);  
  83.       
  84. push(s,T);     
  85.   
  86. while(s->next!=NULL)  
  87. {        while(get_top(s,p)&&p)push(s,p->lchild);  
  88.             
  89.   
  90.             
  91.           pop(s,p);  
  92.           if(s->next!=NULL)  
  93.           {pop(s,p);  
  94.           if(p!=NULL)cout<<p->data<<"  "<<endl;  
  95.           push(s,p->rchild);  
  96.           }  
  97.                  
  98.                 
  99. }  
  100.   
  101.   
  102.   
  103. return 1;  
  104. }  
  105.   
  106. int main()  
  107. {  
  108.      
  109.   
  110.    BitTree T;  
  111.    CreatB_Tree(T);  
  112.    Pre_Order_B_Tree(T);  
  113.      
  114. int m;  
  115. cin>>m;  
  116.  return 1;  
  117. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值