二叉树的实现(纯C语言版)

简介: 二叉树的实现(纯C语言版)

1.实现的接口

1.1通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树

// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi);
if (a[*pi] == '#' || (*pi) >= n)
{
  (*pi)++;
  return NULL;
}
BTNode* root = (BTNode*)malloc(sizeof(BTNode));
root->_data = a[*pi];
(*pi)++;
root->_left = BinaryTreeCreate(a, n, pi);
root->_right = BinaryTreeCreate(a, n, pi);
return root;

1.2 二叉树销毁

// 二叉树销毁
void BinaryTreeDestory(BTNode** root);
void BinaryTreeDestory(BTNode* root)
{
  if (root == NULL)
    return;
  BinaryTreeDestory(root->_left);
  BinaryTreeDestory(root->_right);
  free(root);
}

1.3二叉树节点个数

// 二叉树节点个数
int BinaryTreeSize(BTNode* root);
int BinaryTreeSize(BTNode* root)
{
  if (root == NULL)
    return 0;
  static size = 0;
  size++;
  BinaryTreeSize(root->_left);
  BinaryTreeSize(root->_right);
  return size;
}

1.4二叉树第k层节点个数

// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k);
int BinaryTreeLevelKSize(BTNode* root, int k)
{
  if (root == NULL)
    return 0;
  if (k == 1)
    return 1;
  return BinaryTreeLevelKSize(root->_left, k - 1) + BinaryTreeLevelKSize(root->_right, k - 1);
}

1.5 二叉树查找值为x的节点

// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{
  if (root == NULL)
    return NULL;
  if (root->_data == x)
    return root;
  BTNode* left = BinaryTreeFind(root->_left, x);
  if (left)
    return left;
  BTNode*right = BinaryTreeFind(root->_right, x);
  if (right)
    return right;
}

1.6二叉树前序遍历

// 二叉树前序遍历
void BinaryTreePrevOrder(BTNode* root);
void BinaryTreePrevOrder(BTNode* root)
{
  if (root == NULL)
    return;
  printf("%c ", root->_data);
  BinaryTreePrevOrder(root->_left);
  BinaryTreePrevOrder(root->_right);
}

1.7二叉树中序遍历

// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root);
void BinaryTreeInOrder(BTNode* root)
{
  BinaryTreeInOrder(root->_left);
  printf("%c ", root->_data);
  BinaryTreeInOrder(root->_right);
}

1.8二叉树后序遍历

// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root);
void BinaryTreePostOrder(BTNode* root)
{
  BinaryTreePostOrder(root->_left);
  BinaryTreePostOrder(root->_right);
  printf("%c ", root->_data);
}

1.9层序遍历

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root);
void BinaryTreeLevelOrder(BTNode* root)
{
  Queue q;
  QueueInit(&q);
  if (root)
    QueuePush(&q, root);
  while (!QueueEmpty(&q))
  {
    BTNode* node=QueueFrontdata(&q);
    printf("%c ", node->_data);
    QueuePop(&q);
    if (node->_left)
    {
      QueuePush(&q, node->_left);
    }
    if (node->_right)
    {
      QueuePush(&q, node->_right);
    }
  }
}

1.10判断二叉树是否是完全二叉树

// 判断二叉树是否是完全二叉树
int BinaryTreeComplete(BTNode* root);
int BinaryTreeComplete(BTNode* root)
{
  Queue q;
  QueueInit(&q);
  if (root)
    QueuePush(&q, root);
  while (!QueueEmpty(&q))
  {
    BTNode* tmp= QueueFrontdata(&q);
    QueuePop(&q);
    if (tmp == NULL)
      break;
    QueuePush(&q, tmp->_left);
    QueuePush(&q, tmp->_right);
  }
  while (!QueueEmpty(&q))
  {
    if (QueueFrontdata(&q) != NULL)
    {
      QueueDestory(&q);
      return false;
    }
    QueuePop(&q);
  }
  QueueDestory(&q);
  return true;
}

1.11 二叉树叶子节点个数

// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root);
int BinaryTreeLeafSize(BTNode* root)
{
  if (root == NULL)
    return 0;
  if (root->_left == NULL && root->_right == NULL)
    return 1;
  return BinaryTreeLeafSize(root->_left)+ BinaryTreeLeafSize(root->_right);
}

结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

目录
相关文章
|
4月前
|
C语言
C语言写二叉树
C语言写二叉树
30 0
|
6月前
|
存储 算法 C语言
【C语言数据结构(基础版)】第五站:树和二叉树(上)
【C语言数据结构(基础版)】第五站:树和二叉树
58 0
|
7月前
|
存储 算法 Java
【数据结构】二叉树的前中后序遍历(C语言)
【数据结构】二叉树的前中后序遍历(C语言)
|
2月前
|
存储 C语言
小白的二叉树(C语言实现)
小白的二叉树(C语言实现)
|
4月前
|
存储 算法 C语言
二叉树顺序结构与堆的概念及性质(c语言实现堆)
二叉树顺序结构与堆的概念及性质(c语言实现堆)
25 0
|
5月前
|
存储 分布式数据库 C语言
二叉树的基本概念(C语言)
二叉树的基本概念(C语言)
|
6月前
|
C语言
【C语言数据结构(基础版)】第五站:树和二叉树(下)
【C语言数据结构(基础版)】第五站:树和二叉树
35 0
|
6月前
|
C语言
【C语言数据结构(基础版)】第五站:树和二叉树(中)
【C语言数据结构(基础版)】第五站:树和二叉树
27 0
|
7月前
|
存储 算法 Java
二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】
二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】
52 0
|
算法 C语言
C语言数据结构(15)--二叉树的前序、中序、后序遍历
本文目录 1. 背景 2. 前序遍历 3. 中序遍历 4. 后序遍历 5. 层序遍历 6. 代码实现
319 0
C语言数据结构(15)--二叉树的前序、中序、后序遍历