//树的链式存储--二叉表示法 #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"); }
时间: 2024-10-25 00:49:49