首页 > 其他分享 >BinaryTree

BinaryTree

时间:2024-07-19 20:17:59浏览次数:14  
标签:node Tree BinaryTree Cross linktree new root

/******************************************************************************************************
 * @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;
}

image

标签:node,Tree,BinaryTree,Cross,linktree,new,root
From: https://www.cnblogs.com/hhail08/p/18312303

相关文章

  • BinaryTree_CountLeafNode
    /*******************************************************************************************************@filename: :StacksSimulateQueue*@brief :两个栈实现队列的功能*@author :[email protected]*@date :2024/05/04*@version......
  • CompareBinaryTreeDepth
    /*******************************************************************************************************@filename: :CompareBinaryTreeDepth*@brief :采用递归的方式来计算二叉树的深度*@author :[email protected]*@date :2024/05/03*......
  • 【11月LeetCode组队打卡】Task3--BinaryTree
    树基本术语:节点的度:叶子节点=0分支节点:含有的子树个数节点关系:父,子,兄节点层次:根节点:1floor路径:两节点间经过的节点序列路径长度:路径上的边数树的分类:节点子树是否可以互换位置:有序树:从左到右各子树依次有序(不能互换无序树二叉......