• 二叉树基本操作——收录


      1 #include   
      2 #include   
      3 #include
      4 typedefchar ElemType;   //定义树的结点类型  
      5 typedefstruct BiTNode     
      6 {    
      7      ElemType data;    
      8 struct BiTNode *lchild;  
      9 struct BiTNode *rchild;       
     10 }BiTNode,*BiTree;    
     11 //创建空二叉树
     12 void InitBiTree(BiTree &T)  
     13 {  
     14     T = NULL;  
     15 }  
     16 //二叉树的创建  
     17 void CreateBiTree(BiTree &T)    
     18 {    
     19 char ch;    
     20     scanf("%c",&ch);    
     21 if(ch == ' ')   
     22     {  
     23         T=NULL; //截止二叉树的建立
     24     }  
     25 else
     26     {    
     27        T = (BiTNode *) malloc(sizeof(BiTNode)); //申请结点空间   
     28 if(!T)  
     29           exit(0);  
     30        T-<data = ch;    
     31        CreateBiTree(T-<lchild);  //构造左子树
     32        CreateBiTree(T-<rchild);  //构造右子树
     33      }    
     34  }     
     35 ////////////////////////////////////////////  
     36 //二叉树的先序遍历  
     37 void  PreOrderTraverse(BiTNode *p)    
     38 {    
     39 if(p != NULL)    
     40   {    
     41       printf("%c*",p-<data);    
     42       PreOrderTraverse(p-<lchild);    
     43       PreOrderTraverse(p-<rchild);    
     44    }    
     45  }    
     46 //二叉树的中序遍历  
     47 void InOrderTraverse(BiTNode *p)    
     48 {    
     49 if(p != NULL)    
     50    {    
     51       InOrderTraverse(p-<lchild);    
     52       printf("%c*",p-<data);    
     53       InOrderTraverse(p-<rchild);    
     54    }    
     55  }    
     56 //二叉树的后序遍历  
     57 void PostOrderTraverse(BiTNode *p)    
     58 {    
     59 if(p != NULL)    
     60     {    
     61         PostOrderTraverse(p-<lchild);    
     62         PostOrderTraverse(p-<rchild);    
     63         printf("%c*",p-<data);    
     64     }    
     65 }     
     66 //求二叉树的高度
     67 int High(BiTNode *p)  
     68 {  
     69 int lh=0;  
     70 int rh=0;  
     71 if(p == NULL)  
     72     {  
     73 return 0;  
     74     }  
     75     lh=High(p-<lchild);  
     76     rh=High(p-<rchild);  
     77 if(lh<rh)  
     78     {  
     79 return lh+1;  
     80     }  
     81 else
     82     {  
     83 return rh+1;  
     84     }  
     85 }  
     86 //求二叉树的结点数目
     87 int Count(BiTree T)  
     88 {  
     89 if(T == NULL)  
     90     {  
     91 return 0;  
     92     }  
     93 return Count(T-<lchild)+Count(T-<rchild)+1;  
     94 }  
     95 //实现左右子树的交换
     96 void exchange(BiTree T)  
     97 {  
     98 if(T == NULL)  
     99     {  
    100 return;  
    101     }  
    102 else
    103     {  
    104         BiTree temp=T-<lchild;  
    105         T-<lchild = T-<rchild;  
    106         T-<rchild = temp;  
    107         exchange(T-<lchild);  
    108         exchange(T-<rchild);  
    109     }  
    110 }  
    111 //前序遍历的非递归算法
    112 void PreTraverse(BiTree T)  
    113 {  
    114     BiTree p;  
    115     p=T;  
    116     stack S;  
    117     S.IintStack();  
    118 while(p || S.StackEmpty())  
    119     {  
    120 if(p)  
    121         {  
    122             printf("%d",p-<data);  
    123             Push(&S,p);  
    124             p=p-<lchild;  
    125         }  
    126 else
    127         {  
    128             S.pop(p);  
    129             p=p-<rchild;  
    130         }  
    131     }  
    132 }  
    133 //中序遍历的非递归算法
    134 void InTraverse(BiTree T)  
    135 {  
    136     BiTree p;  
    137     p=T;  
    138     stack S;  
    139     S.IintStack();  
    140 while(p || S.StackEmpty())  
    141     {  
    142 if(p)  
    143         {  
    144             Push(&S,p);  
    145             p=p-<lchild;  
    146         }  
    147 else
    148         {  
    149             S.pop(p);  
    150             printf("%d",p-<data);  
    151             p=p-<rchild;  
    152         }  
    153     }  
    154 }  
    155 //后序遍历的非递归算法
    156 #define MaxSize 100
    157 void PostTraverse(BiTree T)  
    158 {  
    159    BiTree p;  
    160    stack S;  
    161 int intstack[MaxSize];  
    162 int i;  
    163 int top;  
    164    p=T;  
    165 //S.IintStack();
    166 for(int i=0;i<100 ispan>
    167    {  
    168        intstack[i]=0;  
    169    }  
    170    top=0;  
    171 while(p || S.empty())  
    172    {  
    173 if(p)  
    174        {  
    175            Push(&S,p);  
    176            intstack[top]=0;  
    177            top++;  
    178            p=p-<lchild;  
    179        }  
    180 else
    181        {  
    182 if(intstack[top-1] == 0)  
    183            {  
    184                GetTop(S,&p);  
    185                intstack[top-1]=1;  
    186                p=p-<rchild;  
    187            }  
    188 else
    189            {  
    190                Pop(&S,&p);  
    191                top--;  
    192                printf("%d",p-<data);  
    193                p=NULL;  
    194            }  
    195        }  
    196    }  
    197 }  
    198 int main()    
    199 {    
    200     BiTree T;    
    201     CreateBiTree(T);    
    202     PreOrderTraverse(T);    
    203     printf("
    ");    
    204     InOrderTraverse(T);    
    205     printf("
    ");    
    206     PostOrderTraverse(T);    
    207     printf("
    ");    
    208 int a=High(T);  
    209 int b=Count(T);  
    210     exchange(T);  
    211 return 0;   
    212  }   
  • 相关阅读:
    opengles 2.0 渲染Yuv视频
    wzplayer for android 版本面世
    wzplayer for android V1.0快出炉了
    wzplayer for android V1.0快出炉了
    wzplayer for android V1.0
    opengles 2.0 渲染Yuv视频
    新浪微博发布案例
    前端开发单位em
    vue 做一个简单的TodoList
    jquery对类的操作,添加,删除,点击添加,再点击删除
  • 原文地址:https://www.cnblogs.com/pengjunwei/p/3705746.html
Copyright © 2020-2023  润新知