数据结构(二叉树实现)

//二叉树


typeof int TElemType;
typedef struct BiTNode{
    TElemType data;
    struct BiTNode*lchild;
    struct BiTNode*rchild;
}BiTNode,*BiTree;


//先根遍历


void PreRootTraverse(BiTree T){
    if(T!=NULL){
        printf("%c",T->data);
    PreRootTraverse(T->lchild);
    PreRootTraverse(T->rchild);
}    }


//中根遍历


void InRootTraverse(BiTree T){
    if(T!=NULL){
        PreRootTraverse(T->lchild);
        printf("%c",T->data);
        PreRootTraverse(T->rchild);
}}


//查找


bool SearchNode(BiTree&T,char x){
    if(T!=NULL){
        if(T->data==x){
            return 1;
        }
        else{
            return(SearchNode(T->lchild,x)?SearchNode(T->lchild):SearchNode(T->rchild));
        }
    }
    return 0;
}


//统计节点数目


void CountNode(BiTree T,int &num){
    if(T!=NULL){
        num++;
        CountNode(T->lchild,num);
        CountNode(T->rchild,num);    
    }
}


//求深度


int Depth(BiTree T){
    int DepthLeft,DepthRight,Depthval;
    if(T!=NULL){
    DepthLeft=Depth(T->lchild);
    DepthRight=Depth(T->rchild);
    Depthval=1+(DepthLeft>=DepthRight)?DepthLeft:DepthRight;
    }
    else{
    Depthval=0;    
    }
    return Depthval;
}


//判两个数是否相等


bool IsEqual(BiTree&T1,BiTree&T2){
    if(T1==NULL&&T2==NULL){
        return 1;
    }
    if(T1!=NULL&&T2!=NULL){
        if(T1->data==T2.data)
        if(T1->lchild->data==T2->lchild->data)
        if(T1->rchild->data==T2->rchild->data)
        return 1;
    }
    return 0;
}


//建立一个二叉树


BiTree ComCreateBiTree(char ch[],int index){
    BiTree T=NULL;
    if(ch[index]!=NULL){
        T=(BiTree)malloc(sizeof(BiTNode));
        T->data=ch[index];
        T->lchild=ComCreateBiTree(ch,2*index+1);
        T->rchild=ComCreateBiTree(ch,2*index+2);        
    }
    return T;
}
int main(){
    char ch[20]="ABCDEFG";
    BiTree T;
    T=ComCreateBiTree(ch,0);
    printf("先根遍历:");
    PreRootTraverse(T);
    printf("深度为%d",Depth(T));
    
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值