C语言数据结构(14)--二叉树的链式存储结构

简介: 本文目录1. 模型构建2. 节点结构体定义3. 二叉树的构造与遍历

1. 模型构建

二叉树如下图,是由节点、节点与节点之前的连接组成的,而且连接是有顺序的,一般我们认为左边的次序要优先于右边。

image.png

对于每个节点来说,都有一个数据区域存放该节点的信息,另外还需要描述其左右子节点。每个节点的这三个信息确认之后,其实整个树的信息就确认了。


2. 节点结构体定义

typedef struct {

int data;//数据区域

struct BinaryTreeNode* left;//左子节点

struct BinaryTreeNode* right;//右子节点

}BinaryTreeNode;

1

2

3

4

5

非常完美吭,不再解释了。


3. 二叉树的构造与遍历

非常简单啊,从根节点开始逐次构造即可,看代码

#include<stdio.h>
/*
* 使用链表构造与遍历二叉树
* 作者:熊猫大大
* 时间:2019-12-01
*/
#include <stdio.h>
typedef struct {
  int data;//数据区域
  struct BinaryTreeNode* left;//左子节点
  struct BinaryTreeNode* right;//右子节点
}BinaryTreeNode;
//为树的当前节点添加左子节点
int addLeftChild(BinaryTreeNode* curNode, int leftData)
{
  //分配新节点
  BinaryTreeNode* leftNode = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
  //为新节点挂载数据
  leftNode->data = leftData;
  //新节点暂时无子节点
  leftNode->left = NULL;
  leftNode->right = NULL;
  //将新节点挂到当前节点下
  curNode->left = leftNode;
  return 1;
}
//为树的当前节点添加右子节点
int addRightChild(BinaryTreeNode* curNode,int rightData)
{
  //分配新节点
  BinaryTreeNode* rightNode = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
  //为新节点挂载数据
  rightNode->data = rightData;
  //新节点暂时无子节点
  rightNode->left = NULL;
  rightNode->right = NULL;
  //将新节点挂到当前节点下
  curNode->right = rightNode;
  return 1;
}
//遍历当前节点与子节点
void printTree(BinaryTreeNode *node)
{
  if (node == NULL) {
    return;
  }
  printf("父节点:%d", node->data);
  printf("----");
  BinaryTreeNode* temp = NULL;
  if (node->left != NULL) 
  {
    temp = node->left;
    printf("左:%d", temp->data);
  }
  if (node->right != NULL)
  {
    temp = node->right;
    printf("右:%d", temp->data);
  }
  printf("\n");
  printTree(node->left);
  printTree(node->right);
}
//----------------------------------------------------------------------------------------------------测试入口区域
int main()
{
  //设定根节点
  BinaryTreeNode root;
  //根节点
  root.data = 1;
  root.left = NULL;
  root.right = NULL;
  addLeftChild(&root, 2);
  addRightChild(&root, 3);
  //为2号节点增加子节点
  addLeftChild(root.left, 4);
  addRightChild(root.left, 5);
  printTree(&root);
  return 1;
}

image.png


相关文章
|
14天前
|
存储 安全 数据库
除了 HashMap,还有哪些数据结构可以实现键值对存储?
【10月更文挑战第11天】 除了`HashMap`,其他常见支持键值对存储的数据结构包括:`TreeMap`(基于红黑树,键有序)、`LinkedHashMap`(保留插入顺序)、`HashTable`(线程安全)、`B-Tree`和`B+Tree`(高效存储大量数据)、`SkipList`(通过跳跃指针提高查找效率)及`UnorderedMap`(类似`HashMap`)。选择合适的数据结构需根据排序、并发、存储和查找性能等需求。
|
19天前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
14 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
19天前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
15 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
21天前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
24 1
|
19天前
|
存储 算法
探索数据结构:分支的世界之二叉树与堆
探索数据结构:分支的世界之二叉树与堆
|
19天前
探索顺序结构:栈的实现方式
探索顺序结构:栈的实现方式
|
19天前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
19天前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
16 0
|
18天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
30 3
|
C语言 Linux
c语言二叉树--实现
/*系统环境:centos 5.8  *  *  */ #include #include #define MAXSIZE 200 struct node {     int score;     struct node *left;     struct...
730 0