数据结构-二叉树-建立,输出,计算长度-C++

#include<iostream>
#include<stdlib.h>

using namespace std;

typedef struct BTNode BTNode;

struct BTNode{ 
    int ch;
    BTNode * left;
    BTNode * right;
};
// 创建一个二叉树 先序输入 0表示NULL 
BTNode * creatBTNode(){
    BTNode * p;
    int ch;
    cin>>ch;

    if(ch ==0){
        p=NULL;
    }
    else{
        p=(BTNode *)malloc(sizeof(BTNode));
        p->ch=ch;
        p->left=creatBTNode();
        p->right=creatBTNode();
    }
    return p;
}

//*****************先序遍历************
void  preOrderTraverse(BTNode * node){
    if(node){
        cout<<node->ch<<' ';
        preOrderTraverse(node->left);
        preOrderTraverse(node->right); 
    }
}

//******************中序遍历**********
void inOrderTraverse(BTNode * node){
    if(node){
        inOrderTraverse(node->left);
        cout<<node->ch<<' ';
        inOrderTraverse(node->right);
    }
}

//*****************后序遍历输出*******
void lastOrderTraverse(BTNode * node){
    if(node){
        lastOrderTraverse(node->left);
        lastOrderTraverse(node->right);
        cout<<node->ch<<' ';
    }
}
//****************二叉树节点数目******
int  NodeNum(BTNode * node){
    if(node==NULL){
        return 0;
    }
    else{
        return 1+NodeNum(node->left)+NodeNum(node->right);  
    } 
}
//*************二叉树深度*************
int DepthOfTree(BTNode * node){
    if(node){
        return DepthOfTree(node->left)>DepthOfTree(node->right)?DepthOfTree(node->left)+1:DepthOfTree(node->right)+1;
    }
    if(node==NULL){
        return 0;
    }
}
//**************二叉树叶子节点数*******
int leafNum(BTNode * node){
    if(!node){
        return 0;
    }
    else if(node->left==NULL&&node->right==NULL){
        return 1;
    }
    else{
        return (leafNum(node->left)+leafNum(node->right));
    }
}


int main(){

    BTNode * bttree=creatBTNode();

    cout<<"先序遍历输出:"<<endl;
    preOrderTraverse(bttree);

    cout<<"\n中序遍历输出:"<<endl;
    inOrderTraverse(bttree);

    cout<<"\n后序遍历输出:"<<endl;
    lastOrderTraverse(bttree);

    cout<<"\n二叉树节点数目:"<<endl;
    cout<<NodeNum(bttree)<<endl;

    cout<<"二叉树深度"<<endl;
    cout<<DepthOfTree(bttree)<<endl;

    cout<<"叶子节点数"<<endl;
    cout<<leafNum(bttree)<<endl;

    return 0;
}

原文:http://blog.csdn.net/ricardo_he/article/details/41119709

猜你喜欢

转载自blog.csdn.net/cyzyfs/article/details/78576729