#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1024
#define NAME_SIZE 255
//用来实现结点id的自增长
static id = 0;
typedef struct Element //定义数据域结构
{
int id;
char name[NAME_SIZE];
}Element;
//树节点
typedef struct TreeNode
{
Element data; //数据域
struct TreeNode* left; //左子树
struct TreeNode* right; //右子树
}TreeNode;
//二叉链表
typedef struct BinaryTree{
TreeNode* root; //根节点
int length; //二叉链的结点总数
int depth; //二叉链的深度
int diameter; //从叶节点到叶节点的最长路径
}BinaryTree;
//二叉链表的初始化
void InitBinaryTree(BinaryTree* root);
//二叉链表的创建,返回值为 0,表示创建失败,返回值为1,表示创建成功
int CreateBinaryTree(TreeNode* root);
int main(void)
{
BinaryTree tree;
InitBinaryTree(&tree);
//给根结点分配内存
tree.root = (TreeNode*)malloc(sizeof(TreeNode));
printf("请输入根结点:");
CreateBinaryTree(tree.root);
free(tree.root);
return 0;
}
//二叉链表的初始化
void InitBinaryTree(BinaryTree* tree)
{
tree->root = NULL;
tree->depth = 0;
tree->diameter = 0;
tree->length = 0;
}
//二叉链表的创建
int CreateBinaryTree(TreeNode* root)
{
//根结点为空,退出创建过程
if(!root)
{
return 0;
}
char inputname[NAME_SIZE];//用户输入的节点名
gets(inputname);
//用户输入回车,表示结束当前子树的录入
if(strcmp(inputname,"\0")==0)
{
return 0;
}
//创建当前结点
root->data.id = ++id;
strcpy(root->data.name,inputname);
//为输入左右结点做准备
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right = (TreeNode*)malloc(sizeof(TreeNode));
//分别递归创建左子树和右子树
printf("左节点:");
if(CreateBinaryTree(root->left)==0)
{
//不创建这个结点,则销毁刚创建的结点
free(root->left);
root->left = NULL;
}
printf("右节点:");
if(CreateBinaryTree(root->right)==0)
{
//不创建这个结点,则销毁刚创建的结点
free(root->right);
root->right = NULL;
}
return 1;
}
二叉链表的创建
最新推荐文章于 2023-03-29 17:33:24 发布