二叉树(建树,深度,层次遍历……)

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define maxsize 20
using namespace std;
int num=0;
typedef struct Lnode
{
    char data;
    struct Lnode *lchild;
    struct Lnode *rchild;
}node,*Bitree;
Bitree createbitree()
{
    Bitree T;
    char ch;
    cin>>ch;
    if(ch == '#')
        return 0;
    else
    {
        T = (Bitree)malloc(sizeof(node));
        T->data = ch;
        T->lchild = createbitree();
        T->rchild = createbitree();
        return T;
    }
}
void print(Bitree T)
{
    if(T){
        cout<<T->data<<" ";
        print(T->lchild);
        print(T->rchild);
    }
}
void leaves(Bitree T)
{
    if(T)
    {
        if(T->lchild==NULL&&T->rchild==NULL){
            cout<<T->data<<" ";
        }
        leaves(T->lchild);
        leaves(T->rchild);
    }
}
void onechild(Bitree T)
{
    if(T)
    {
        if((T->lchild==NULL&&T->rchild!=NULL)||(T->rchild==NULL&&T->lchild!=NULL))
            num++;
        onechild(T->lchild);
        onechild(T->rchild);
    }
}
int depth(Bitree T)
{
    if(T==NULL)
        return 0;
    else{
        int m = depth(T->lchild);
        int n = depth(T->rchild);
        if(m>n)
            return m+1;
        else
            return n+1;
    }
}
int Node (Bitree T)
{
    if(T==NULL)
        return 0;
    else{
        int m = Node(T->lchild);
        int n = Node(T->rchild);
        return m+n+1;
    }
}
void Levelorder (Bitree T) //层次遍历
{
    if(T){
        int front ;
        int rear;
        front = rear = 0;
        Bitree queue[maxsize];
        queue[rear++] = T;
        while(front < rear)
        {
            T = queue[front++];
            if(T->lchild)
                queue[rear++]=T->lchild;
            if(T->rchild    )
                queue[rear++]=T->rchild;
            cout<<T->data<<" ";
        }
    }
}
int main()
{
    Bitree T;
    T = createbitree();
    print(T);
    cout<<endl;
    cout<<"leaves of the tree:";
    leaves(T);
    cout<<endl;
    onechild(T);
    cout<<"The tree has only one child:"<<num;
    cout<<endl;
    printf("The depth of the tree is :%d",depth(T));
    cout<<endl;
    printf("The node of the tree is :%d",Node(T));
    cout<<endl;
    printf("The Levelorder of the tree is:" );
    Levelorder(T);
}

猜你喜欢

转载自blog.csdn.net/qq_42018521/article/details/81051419
今日推荐