二叉树算法

来源:互联网 发布:js 数组取最后一个 编辑:程序博客网 时间:2024/06/10 05:09
#include <iostream>#include <stdio.h>using namespace std;typedef struct BiTNode{    char data;    struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;BiTree createBiTree(BiTree T){    char ch;    cin>>ch;    if(ch=='#')        return NULL;    else    {        T=new BiTNode;        T->data=ch;        T->lchild=createBiTree(T->lchild);        T->rchild=createBiTree(T->rchild);    }    return T;}/*BiTree createBiTree(){    BiTree T;    char ch;    cin>>ch;    if(ch=='#')        return NULL;    else    {        T=new BiTNode;        T->data=ch;        T->lchild=createBiTree();        T->rchild=createBiTree();    }    return T;}*/ //中序遍历 void inTraverse(BiTree T) {     if(T)     {         inTraverse(T->lchild);         cout<<T->data<<" ";         inTraverse(T->rchild);     } } //先序遍历 void preTraverse(BiTree T) {     if(T)     {         cout<<T->data<<" ";         preTraverse(T->lchild);         preTraverse(T->rchild);     } } //后序遍历 void postTraverse(BiTree T) {     if(T)     {         postTraverse(T->lchild);         postTraverse(T->rchild);         cout<<T->data<<" ";     } } //层次遍历 void levelTraverse(BiTree T) {    BiTree p[100];    int f=0,r=0;    if(T)    {        p[r++]=T;        while(f!=r)        {            cout<<p[f]->data<<" ";            if(p[f]->lchild)                p[r++]=p[f]->lchild;            if(p[f]->rchild)                p[r++]=p[f]->rchild;            f++;        }    } } //求结点数目 int getNodes(BiTree T) {     if(!T)        return 0;     return getNodes(T->lchild)+getNodes(T->rchild)+1; } //求叶子结点数 int getleave(BiTree T) {    if(!T)        return 0;    if(!T->lchild&&!T->rchild)        return 1;    return getleave(T->lchild)+getleave(T->rchild); } //求树的深度 int depth(BiTree T) {     int ld,rd;     if(!T)        return 0;     ld=depth(T->lchild);     rd=depth(T->rchild);     return ld>rd?ld+1:rd+1; }int main(){    BiTree T;    T=createBiTree(T);//T=createBiTree();函数功能不需要参数时,形参就可以省写    cout<<"先序遍历序列为"<<endl;    preTraverse(T);    cout<<endl;    cout<<"中序遍历序列为"<<endl;    inTraverse(T);    cout<<endl;    cout<<"后序遍历序列为"<<endl;    postTraverse(T);    cout<<endl;    cout<<"层次遍历序列为"<<endl;    levelTraverse(T);    cout<<endl;    cout<<"结点总数为"<<getNodes(T)<<endl;    cout<<"叶子结点总数为"<<getleave(T)<<endl;    cout<<"树的深度为"<<depth(T)<<endl;    return 0;}
原创粉丝点击