zoukankan      html  css  js  c++  java
  • 二叉树周游

    lastOne.h

      1 #ifndef __lastOne_H__
      2 #define __lastOne_H__
      3 #include <iostream>
      4 #include <stdio.h>   
      5 #include <stdlib.h>  
      6 typedef char TElemType;
      7 using namespace std;
      8 typedef struct BiTNode {
      9     TElemType data;
     10     struct BiTNode *lchild,*rchild;
     11 } BiTNode,*BiTree;
     12 struct Node;
     13 typedef struct Node * PNode;
     14 typedef int DataType;
     15 struct Node{
     16     BiTree bnode;
     17     PNode link;
     18 };
     19 struct LinkStack{
     20     PNode top;
     21 };
     22 typedef struct LinkStack * PLinkStack;
     23 PLinkStack createEmptyStack_link(void);
     24 int isEmptyStack_link(PLinkStack plstack);
     25 void push_link(PLinkStack plstack,BiTree x);
     26 BiTree pop_link(PLinkStack plstack);
     27 void CreateBiTree(BiTree &T);
     28 void recPostOrderTraverse(BiTree T);
     29 void recInOrderTraverse(BiTree T);
     30 void recPreOrderTraverse(BiTree T);
     31 void InOrderTraverse(BiTree T);
     32 void PreOrderTraverse(BiTree T);
     33 void PostOrderTraverse(BiTree T);
     34 void menu();
     35 void childrenLeaves(BiTree T);
     36 void printChildrenLeaves(BiTree T);
     37 int Depth(BiTree T);
     38 int NodeCount(BiTree T);
     39 int sum=0;
     40 void printChildrenLeaves(BiTree T){
     41     if(T==NULL){
     42     }
     43     else{
     44         if(T->lchild||T->rchild){
     45             printChildrenLeaves(T->lchild);
     46             printChildrenLeaves(T->rchild);
     47         }
     48         else{
     49             cout<<T->data;
     50             printChildrenLeaves(T->lchild);
     51             printChildrenLeaves(T->rchild);
     52         }
     53     }
     54 }
     55 void childrenLeaves(BiTree T){
     56     if(T==NULL){
     57     }
     58     else{
     59         if(T->lchild!=NULL&&T->rchild!=NULL){
     60             sum++;
     61             childrenLeaves(T->lchild);
     62             childrenLeaves(T->rchild);
     63         }
     64     }
     65 }
     66 int Depth(BiTree T){
     67     int n,m;
     68     if(T==NULL)
     69         return 0;
     70     else {
     71         m=Depth(T->lchild);
     72         n=Depth(T->rchild);
     73         if(m>n)
     74             return(m+1);
     75         else
     76             return(n+1);
     77     }
     78 }
     79 int NodeCount(BiTree T){
     80     if(T==NULL)
     81         return 0;
     82     else
     83         return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
     84 }
     85 void menu(){
     86     cout<<"1.recPre
    2.recIn
    3.recPost
    4.pre
    5.in
    6.post
    7.depth
    8.leaves
    9.childrenLeaves
    10.printChildrenLeaves
    ";
     87 }
     88 void recPreOrderTraverse(BiTree T){
     89     if(T){
     90         cout<<T->data;
     91         recPreOrderTraverse(T->lchild);
     92         recPreOrderTraverse(T->rchild);
     93     }
     94 }
     95 void recInOrderTraverse(BiTree T){
     96     if(T){
     97         recInOrderTraverse(T->lchild);
     98         cout<<T->data;
     99         recInOrderTraverse(T->rchild);
    100     }
    101 }
    102 void recPostOrderTraverse(BiTree T){
    103     if(T){
    104         recPostOrderTraverse(T->lchild);
    105         recPostOrderTraverse(T->rchild);
    106         cout<<T->data;
    107     }
    108 }
    109 void CreateBiTree(BiTree &T){  
    110     char ch;  
    111     scanf("%c",&ch);  
    112     if(ch=='#'){  
    113         T=NULL;  
    114         return;  
    115     }  
    116     else{  
    117         T=(BiTree)malloc(sizeof(BiTNode));  
    118         if(!T)exit(1);  
    119         T->data=ch;  
    120         CreateBiTree(T->lchild);  
    121         CreateBiTree(T->rchild);  
    122     }  
    123 }  
    124 void InOrderTraverse(BiTree T){     
    125     PLinkStack plstack=createEmptyStack_link();
    126     if(!T){  
    127         printf("empty tree£¡
    ");  
    128         return;  
    129     }  
    130     while(T||!isEmptyStack_link(plstack)){  
    131         while(T){  
    132             push_link(plstack,T); 
    133             T=T->lchild;  
    134         }
    135         T=pop_link(plstack); 
    136         printf("%c",T->data);  
    137         T=T->rchild;  
    138     }                                                                                                                                     
    139 }  
    140 void PreOrderTraverse(BiTree T){  
    141     PLinkStack plstack=createEmptyStack_link();  
    142     if(!T){  
    143         printf("empty tree£¡
    ");  
    144         return;  
    145     }  
    146     while(T||!isEmptyStack_link(plstack)){  
    147         while(T){  
    148             push_link(plstack,T);  
    149             printf("%c",T->data);  
    150             T=T->lchild;  
    151         }
    152         T=pop_link(plstack);       
    153         T=T->rchild;          
    154     }                                                                                                                                     
    155 }  
    156 void PostOrderTraverse(BiTree T){
    157     PLinkStack plstack=createEmptyStack_link();  
    158     BiTree p=T;
    159     BiTree t;
    160     while(p!=NULL||!isEmptyStack_link(plstack)){
    161         while(p!=NULL){
    162             push_link(plstack,p); 
    163             p=p->lchild?p->lchild:p->rchild;
    164         }
    165         p=pop_link(plstack);
    166         printf("%c",p->data);
    167         if(plstack->top!=NULL)t=plstack->top->bnode;
    168         if(!isEmptyStack_link(plstack)&&t->lchild==p){
    169             p=t->rchild;
    170         }
    171         else p=NULL;
    172     }
    173 }
    174 PLinkStack createEmptyStack_link(void){
    175     PLinkStack plstack;
    176     plstack=(PLinkStack)malloc(sizeof(struct LinkStack));
    177     if(plstack!=NULL){
    178         plstack->top=NULL;
    179         printf("succeed
    ");
    180     }
    181     else
    182         printf("out of space
    ");
    183     return plstack;
    184 }
    185 int isEmptyStack_link(PLinkStack plstack){
    186     return (plstack->top==NULL);
    187 }
    188 void push_link(PLinkStack plstack,BiTree T){
    189     PNode p;
    190     p=(PNode)malloc(sizeof(struct Node));
    191     if(p==NULL)printf("out of space
    ");
    192     else{
    193         p->bnode=T; 
    194         p->link=plstack->top;
    195         plstack->top=p;
    196     }
    197 }
    198 BiTree pop_link(PLinkStack plstack){
    199     PNode p;
    200     if(isEmptyStack_link(plstack)) printf("Empty stack pop
    ");
    201     else{
    202         BiTree num;
    203         num=plstack->top->bnode;
    204         p=plstack->top;
    205         plstack->top=plstack->top->link;
    206         free(p);
    207         return num;
    208     }
    209 }
    210 #endif    

    accept_linkTree_traverse

     1 //ab#c###
     2 //ab##cdf###e##
     3 //ABD#G###CE##FH###
     4 #include"lastOne.h"
     5 int main() 
     6 {
     7     BiTree a;
     8     int height,num;
     9     int in;
    10     cout<<"please all the elements
    ";
    11     CreateBiTree(a);
    12     num=NodeCount(a);
    13     menu();
    14     while(1){
    15         scanf("%d",&in);
    16         switch(in){
    17         case 1:
    18             cout<<"recPre:";
    19             recPreOrderTraverse(a);
    20             cout<<"
    ";
    21             break; 
    22         case 2:
    23             cout<<"recIn:";
    24             recInOrderTraverse(a);
    25             cout<<"
    ";
    26             break; 
    27         case 3:
    28             cout<<"recPost:";
    29             recPostOrderTraverse(a);
    30             cout<<"
    ";
    31             break; 
    32         case 4:
    33             cout<<"pre:";
    34             PreOrderTraverse(a);
    35             cout<<"
    ";
    36             break; 
    37         case 5:
    38             cout<<"in:";
    39             InOrderTraverse(a);
    40             cout<<"
    ";
    41             break;
    42         case 6:
    43             cout<<"post:";
    44             PostOrderTraverse(a);
    45             cout<<"
    ";
    46             break;    
    47         case 7:
    48             cout<<"depth:";
    49             height=Depth(a);
    50             cout<<height<<endl;
    51             cout<<"
    ";
    52             break;
    53         case 8:
    54             cout<<"leaves:";
    55             num=NodeCount(a);
    56             cout<<num;
    57             cout<<"
    ";
    58             break;
    59         case 9:
    60             cout<<"childrenLeaves:";
    61             childrenLeaves(a);
    62             cout<<sum+1;
    63             cout<<"
    ";
    64             break;
    65         case 10:
    66             cout<<"printChildrenLeaves:";
    67             printChildrenLeaves(a);
    68             cout<<"
    ";
    69             break;
    70         } 
    71     }
    72     return 0;
    73 }

  • 相关阅读:
    二分
    枚举
    dp
    bfs
    bfs
    dfs
    ipython快捷键
    虚拟机串口连接嵌入式开发板
    rtmp向IR601移植过程(无功能步骤,只有移植步骤)
    静态库和动态库
  • 原文地址:https://www.cnblogs.com/DixinFan/p/8999378.html
Copyright © 2011-2022 走看看