/******************************************************************************************************
* @file name: :main.c
* @brief :创建二叉树
* @author :[email protected]
* @date :2024/07/19
* @version 1.0 :V1.0
* @property :暂无
* @note :None
* CopyRight (c) 2023-2024 [email protected] All Right Reseverd
******************************************************************************************************/
#include "drawtree.h"
/*
第一步:头文件 --- 用来通过网页 显示 你构建的 二叉树
第二步:函数的声明和__结构体类型的确定__
第一个需要声明的函数: 创建二叉树新节点的函数 --- Create_Cross_Tree_Node();
第二个需要添加节点的函数:具备递归调用 --- Insert_Cross_Tree_Node();
第三个需要构建整个二叉树:具备循环创建添加新节点 --- Structure_Cross_Tree();
第三步:函数的封装
第四步:函数的调用
*/
/*******************************************************************************************************
* @funname : Create_Cross_Tree_Node
* @brief : 创建新节点并且初始化
* @param : None
* @retval : _linktree
* @date :2024/07/19
* @version :V1.0
* @note :None
*******************************************************************************************************/
// 创建新节点并且初始化
_linktree Create_Cross_Tree_Node()
{
_linktree new_tree_node = (_linktree)calloc(1, sizeof(sizeof(_treenode)));
if (new_tree_node == NULL)
{
printf("创建新节点失败!\n");
return (_linktree)-1;
}
// 初始化
new_tree_node->lchild = NULL;
new_tree_node->rchild = NULL;
new_tree_node->data = 0;
return new_tree_node;
}
/*******************************************************************************************************
* @funname : Insert_Cross_Tree_Node
* @brief : 创建新节点并且初始化
* @param :
* @a:root
* @:new_node
* @retval : _linktree
* @date :2024/07/19
* @version :V1.0
* @note :None
*******************************************************************************************************/
// 创建新节点之后插入到树中
_linktree Insert_Cross_Tree_Node(_linktree root, _linktree new_node)
{
if (new_node == NULL)
{
printf("新节点都异常了,还能添加吗?\n");
return (_linktree)-1;
}
if (root == (_linktree)NULL)
return new_node;
char obj_seat;
printf("请输入要添加结点的方向:(r or l)");
scanf("%c", &obj_seat);
while (getchar() != '\n')
;
if (obj_seat == SEAT_LEFT)
{
root->lchild = Insert_Cross_Tree_Node(root->lchild, new_node);
}
else if (obj_seat == SEAT_RIGHT)
{
root->rchild = Insert_Cross_Tree_Node(root->rchild, new_node);
}
else
{
printf("你有问题,没有这个方向!\n");
free(new_node);
}
// 原路返回
return root;
}
/*******************************************************************************************************
* @funname : Structure_Cross_Tree
* @brief : 二叉树结点的拼接
* @param : None
* @retval : _linktree
* @date :2024/07/19
* @version :V1.0
* @note :None
*******************************************************************************************************/
// 拼接
_linktree Structure_Cross_Tree()
{
// 创建一个根节点
_linktree root = Create_Cross_Tree_Node();
if (root == NULL)
{
printf("创建根节点失败!\n");
return (_linktree)-1;
}
printf("请输入根节点的数据:");
scanf("%d", &root->data);
// 清除换行
while (getchar() != '\n')
;
while (1)
{
// 创建新节点
_linktree new_tree_node = Create_Cross_Tree_Node();
if (new_tree_node == NULL)
{
printf("创建新节点失败!\n");
return (_linktree)-1;
}
// 键盘输入新数据
printf("输入需要添加的数据:");
scanf("%d", &new_tree_node->data);
while (getchar() != '\n')
;
// 判断退出条件是不是要停止加入结点
if (new_tree_node->data == EXIT_MASK)
{
printf("构建二叉树完成!\n");
break;
}
// 如果不满足退出条件,可继续添加结点就添加到二叉树中,调用Insert_Cross_Tree_Node函数
Insert_Cross_Tree_Node(root, new_tree_node);
}
return root;
}
int main(int argc, char *argv[])
{
_linktree root = Structure_Cross_Tree();
if (root == (_linktree)-1)
{
printf("构建二叉树失败!\n");
return -1;
}
// 画图
draw(root);
return 0;
}
标签:node,Tree,BinaryTree,Cross,linktree,new,root
From: https://www.cnblogs.com/hhail08/p/18312303