数据结构 树的链式存储(二叉表示法)

//树的链式存储--二叉表示法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct _TreeNode{
    //数据域
    int data;
    //指针域
    struct _TreeNode * leftchild;//左孩子指针
    struct _TreeNode * rightchild;//右孩子指针
}TreeNode, *TreeNodePointer;

/*
以上语法定义了两个类型
第一个是typedef struct _TreeNode TreeNode 树的节点类型
第二个是typedef struct _TreeNode * TreeNodePointer 树的指针类型

定义了一个结构体
typedef struct _TreeNode{
int data;
struct _TreeNode * leftchild;
struct _TreeNode * rightchild;
};
重命名 typedef struct _TreeNode TreeNode 
定义一个指针类型 typedef struct _TreeNode * TreeNodePointer  
注意:struct _TreeNode *这才是指针类型,TreeNodePointer是类型的名字
*/

void Test1(){
    //定义结构体对象
    TreeNode t1, t2, t3, t4, t5;
    //填充数据域
    t1.data = 1;
    t2.data = 2;
    t3.data = 3;
    t4.data = 4;
    t5.data = 5;

    //建立树之间的关系
    //t1是根节点  t2是t1的左孩子
    t1.leftchild = &t2;
    t1.rightchild = NULL;

    // t3是t2的左孩子
    t2.leftchild = &t3;
    t2.rightchild = NULL;

    // t4是t2的左孩子
    t3.leftchild = &t4;
    t3.rightchild = NULL;

    // t5是t4的左孩子
    t4.leftchild = &t5;
    t4.rightchild = NULL;

    //t5没有孩子节点
    t5.leftchild = NULL;
    t5.rightchild = NULL;
}

void Test2(){
    //定义结构体对象
    TreeNodePointer t1 = NULL, t2 = NULL, t3 = NULL, t4 = NULL, t5 = NULL;
    t1 = (TreeNodePointer)malloc(sizeof(TreeNode));
    if (t1==NULL)
    {
        printf("分配内存失败!");
        goto END;
    }
    //初始化数据
    memset(t1, 0, sizeof(TreeNode));
    t2 = (TreeNodePointer)malloc(sizeof(TreeNode));
    if (t2 == NULL)
    {
        printf("分配内存失败!");
        goto END;
    }
    //初始化数据
    memset(t2, 0, sizeof(TreeNode));
    t3= (TreeNodePointer)malloc(sizeof(TreeNode));
    if (t3 == NULL)
    {
        printf("分配内存失败!");
        goto END;
    }
    //初始化数据
    memset(t3, 0, sizeof(TreeNode));
    t4 = (TreeNodePointer)malloc(sizeof(TreeNode));
    if (t4 == NULL)
    {
        printf("分配内存失败!");
        goto END;
    }
    //初始化数据
    memset(t4, 0, sizeof(TreeNode));
    t5 = (TreeNodePointer)malloc(sizeof(TreeNode));
    if (t5 == NULL)
    {
        printf("分配内存失败!");
        goto END;
    }
    //初始化数据
    memset(t5, 0, sizeof(TreeNode));
    //填充数据域
    t1->data = 1;
    t2->data = 2;
    t3->data = 3;
    t4->data = 4;
    t5->data = 5;

    //建立树之间的关系
    //t1是根节点  t2是t1的左孩子
    t1->leftchild = t2;
    t1->rightchild = NULL;

    // t3是t2的左孩子
    t2->leftchild = t3;
    t2->rightchild = NULL;

    // t4是t2的左孩子
    t3->leftchild = t4;
    t3->rightchild = NULL;

    // t5是t4的左孩子
    t4->leftchild = t5;
    t4->rightchild = NULL;

    //t5没有孩子节点
    t5->leftchild = NULL;
    t5->rightchild = NULL;

END:
    if (t1!=NULL)
    {
        free(t1);
        t1 = NULL;
    }
    if (t2 != NULL)
    {
        free(t2);
        t2 = NULL;
    }
    if (t3 != NULL)
    {
        free(t3);
        t3 = NULL;
    }
    if (t4 != NULL)
    {
        free(t4);
        t4 = NULL;
    }
    if (t5 != NULL)
    {
        free(t5);
        t5 = NULL;
    }
}

void main(){
    
    system("pause");
}

posted on 2016-07-31 10:57  寒魔影  阅读(485)  评论(0编辑  收藏  举报

导航