近期学习二叉树,注重递归的使用。

//20191003155  计算机类1902  李晓宁  5.24 
#include<iostream>
#include<string.h>
using namespace std;
static int i=0;//i为全局变量 
typedef struct BiNode{                //二叉链表定义
    char data;
    struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;

//用算法5.3 先序遍历的顺序建立二叉链表
void CreateBiTree(BiTree &T,char a[]){    
    //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
    char ch;
    ch=a[i++];
    {if(ch=='#')  T=NULL;            //递归结束,建空树
    else{                            
        T=new BiTNode;
        T->data=ch;                    //生成根结点
        CreateBiTree(T->lchild,a);    //递归创建左子树
        CreateBiTree(T->rchild,a);    //递归创建右子树
    }    
    }        
                
}                                    //CreateBiTree

void InOrderTraverse(BiTree T){  
    //中序遍历二叉树T的递归算法
    if(T){
        cout << T->data<<" ";
        InOrderTraverse(T->lchild);
        InOrderTraverse(T->rchild);
        
    }
}
int CountLeaves(BiTree T)
{
    if(T==NULL) return 0;
    else if(T->lchild==NULL&&T->rchild==NULL) return 1;
    else  return CountLeaves(T->lchild)+CountLeaves(T->rchild);
    
}
int main(){
    
     char a[100];
    while(cin>>a)
    {
    BiTree tree;
    i=0;
    CreateBiTree(tree,a);
    InOrderTraverse(tree);
    cout<<endl;
    cout<<CountLeaves(tree)<<endl;
    return 0;
    }

}
View Code

 

posted on 2020-05-28 23:41  Sanen  阅读(144)  评论(0)    收藏  举报