关于二叉树的存储

数据结构七

一、二叉树的存储

说明:树的存储分为链式存储和顺序存储两种,然而顺序存储简单,实际中的使用少之又少,因此,这里只使用链式

1.二叉树的链式存储

#include "stdio.h"
#include "stdlib.h"

typedef char ElemType;
struct BiTNode{
    ElemType data;
    struct BiTNode* lChild,* rChild;
};
//创建一个节点
struct BiTNode* CreateNode(ElemType data){
    struct BiTNode* p=(struct BiTNode*) malloc(sizeof(struct BiTNode));
    if(!p){
        printf("No enough memory to allocate!\n");
        exit(0);
    }
    p->data=data;
    p->lChild=NULL;
    p->rChild=NULL;
    return p;
}
//插入元素
struct BiTNode* InsertNode(struct BiTNode* T,ElemType data){
    if(T==NULL){
        return CreateNode(data);
    }
    if(T->data>data)//在左孩子位置上插入
        T->lChild=InsertNode(T->lChild,data);
    else//在右孩子位置上插入
        T->rChild=InsertNode(T->rChild,data);
    return T;
}
//打印
void Visit(struct BiTNode* T){
    printf("The data of the binary-tree which is listed is %d\n",T->data);
}
//先序遍历
void PreOrder(struct BiTNode* T){
    if(T!=NULL){
        Visit(T);
        PreOrder(T->lChild);
        PreOrder(T->rChild);
    }
}
//中序遍历
void InOrder(struct BiTNode* T){
    if(T!=NULL){
        InOrder(T->lChild);
        Visit(T);
        InOrder(T->rChild);
    }
}
//后序遍历
void PostOrder(struct BiTNode* T){
    if(T!=NULL){
        PostOrder(T->lChild);
        PostOrder(T->rChild);
        Visit(T);
    }
}
//获取树的深度
int TreeDepth(struct BiTNode* T){
    if(T==NULL){
        return 0;
    } else{
        int l= TreeDepth(T->lChild);
        int r= TreeDepth(T->rChild);
        return l>r?l+1:r+1;
    }
}
int main(){
    //1.定义一个空树
    struct BiTNode* root= CreateNode(5);
    //2.插入新节点
    //3.插入一个新节点
    root= InsertNode(root,1);
    root= InsertNode(root,6);
    root= InsertNode(root,2);
    root= InsertNode(root,3);
    root= InsertNode(root,7);
    root= InsertNode(root,9);
    root= InsertNode(root,8);
    root= InsertNode(root,4);
    //4.先序遍历
    printf("-----pre-order-----\n");
    PreOrder(root);
    //5.中序遍历
    printf("-----in-order-----\n");
    InOrder(root);
    //6.后序遍历
    printf("-----post-order-----\n");
    PostOrder(root);
    //7.树的深度
    printf("The height of binary-tree which is listed is %d\n", TreeDepth(root));
    return 0;
}

实现效果

D:\project\clion\ch3\cmake-build-debug\binary_tree_list.exe
-----pre-order-----
The data of the binary-tree which is listed is 5
The data of the binary-tree which is listed is 1
The data of the binary-tree which is listed is 2
The data of the binary-tree which is listed is 3
The data of the binary-tree which is listed is 4
The data of the binary-tree which is listed is 6
The data of the binary-tree which is listed is 7
The data of the binary-tree which is listed is 9
The data of the binary-tree which is listed is 8
-----in-order-----
The data of the binary-tree which is listed is 1
The data of the binary-tree which is listed is 2
The data of the binary-tree which is listed is 3
The data of the binary-tree which is listed is 4
The data of the binary-tree which is listed is 5
The data of the binary-tree which is listed is 6
The data of the binary-tree which is listed is 7
The data of the binary-tree which is listed is 8
The data of the binary-tree which is listed is 9
-----post-order-----
The data of the binary-tree which is listed is 4
The data of the binary-tree which is listed is 3
The data of the binary-tree which is listed is 2
The data of the binary-tree which is listed is 1
The data of the binary-tree which is listed is 8
The data of the binary-tree which is listed is 9
The data of the binary-tree which is listed is 7
The data of the binary-tree which is listed is 6
The data of the binary-tree which is listed is 5
The height of binary-tree which is listed is 5

Process finished with exit code 0
posted @ 2021-10-22 21:48  世间万事-往事随风  阅读(39)  评论(0编辑  收藏  举报