二叉树

Posted on 2016-06-16 13:36  竹雨OvO  阅读(131)  评论(0)    收藏  举报
#include <iostream>
using namespace std;

//单个孩子
struct BiTree{
    int data;       //数据
    BiTree * left;  //左
    BiTree * right; //右
};

//插入一个节点
BiTree * insertNode(BiTree * pRoot,int node){
    BiTree * pCurrNode;     //当前节点
    BiTree * pParentNode = nullptr;   //父亲节点
    BiTree * pNewNode = new BiTree; //新节点
    pNewNode->data = node;  //保存数据
    pNewNode->right= NULL;  //init right
    pNewNode->left = NULL;  //init left
    
    if(pRoot==NULL){
        return pNewNode;
    }else{
        pCurrNode = pRoot;
        while(pCurrNode!=NULL){
            pParentNode = pCurrNode;
            //寻找空的节点进行插入
            (node < pCurrNode->data) ? pCurrNode=pCurrNode->left : pCurrNode=pCurrNode->right;
        }
        (pParentNode->data > node) ? pParentNode->left=pNewNode : pParentNode->right=pNewNode;
    }
    return pRoot;
}

//创建二叉树
BiTree * createBiTree(int data[],int len){
    BiTree * pRoot = NULL; //根
    for(int i=0;i<len;i++){
        pRoot = insertNode(pRoot,data[i]);
    }
    return pRoot;
}

//打印二叉树
void printBiTree(BiTree * pRoot){
    
    BiTree * pPointer = pRoot->left;
    if(pPointer!=NULL){
        cout<<"->树的左子树节点"<<endl;
    }
    if(pRoot!=NULL) cout<<"["<<pRoot->data<<"]";
    while (pPointer!=NULL) {
        cout<<"["<<pPointer->data<<"]";
        pPointer = pPointer->left;
    }
    
    if(pPointer!=NULL) cout<<endl;
    pPointer = pRoot->right;
    if(pPointer!=NULL){
        cout<<"\n->树的右子树节点"<<endl;
    }
    while (pPointer!=NULL) {
        cout<<"["<<pPointer->data<<"]";
        pPointer = pPointer->right;
    }
    if(pPointer!=NULL) cout<<endl;
}

//前序遍历
void PreOder(BiTree * pPointer){
    if(pPointer!=NULL){
        cout<<"["<<pPointer->data<<"]";
        PreOder(pPointer->left);
        PreOder(pPointer->right);
    }
}

//释放资源
void Release(BiTree * pRoot){
    if(pRoot==NULL){
        return ;
    }
    Release(pRoot->left);
    Release(pRoot->right);
    delete pRoot;
    pRoot = NULL;
}

int main(){
    
    cout<<"请输入节点数:"<<endl;
    int num; cin>>num; (num>100)?num=100:(num<1)?num=1:num;
    int * data = new int[num];
    cout<<"请输入"<<num<<"个节点的数据:"<<endl;
    for(int i=0;i<num;i++){
        cin>>data[i];
    }
    cout<<"二叉树创建中...."<<endl;
    auto biTree = createBiTree(data,num);
    cout<<"创建完成,打印如下:"<<endl;
    PreOder(biTree);
    cout<<"\n资源释放中...."<<endl;
    Release(biTree);
    delete[] data;
    data = NULL;
    cout<<"资源释放成功!"<<endl;
    return 0;
}