【数据结构和算法】二叉树的创建,遍历,复制,结点计算,高度计算

简介: 【数据结构和算法】二叉树的创建,遍历,复制,结点计算,高度计算

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//二叉树的数据结构
typedef struct Tree
{
  char data;
  struct Tree *lchild, *rchild;
}Tree; 
//二叉树的创建
Tree* FrontCreateTree()
{
  char c;
  Tree *T;
  scanf("%c",&c);
  if(' ' == c)
  T = NULL;
  else
  {
  T = (Tree *)malloc(sizeof(Tree));
  T->lchild = FrontCreateTree();
  T->data = c;
  T->rchild = FrontCreateTree();
  }
  return T;
}
//前序遍历
void FrontShowTree(Tree *T)
{
  if( T )
  {
  printf("%c",T->data);
  FrontShowTree(T->lchild);
  FrontShowTree(T->rchild);
  }
}
//总节点计算
int count;
void CountTreeNode(Tree *T) 
{
  if (tree)
  {
  count += 1;   //计数 
  CountTreeNode(tree->lchild);
  CountTreeNode(tree->rchild); 
  }
} 
//树的高度计算
int DepTreeHeight(Tree *T)
{
  int LeftTreeHight = 0, RightTreeHight = 0;
  if(T == NULL)
  return 0;
  else
  {
  LeftTreeHight = DepTreeHeight(T->lchild);
  RightTreeHight = DepTreeHeight(T->rchild);
  if( LeftTreeHight > RightTreeHight )
    return LeftTreeHight + 1;
  else
    return RightTreeHight + 1;
  }
}
//每层节点计算
void CountStateNode(Tree *T, int level, int *levelbuf)
{
  if( T )
  {
  levelbuf[level]++;
  CountStateNode(T->lchild,level + 1,levelbuf);
  CountStateNode(T->rchild,level + 1,levelbuf);
  }
}
//复制二叉树
Tree *CopyBinaryTree(Tree *T)
{
  if(T)
  {
  Tree *NewTree = (Tree* )malloc(sizeof(Tree));
  NewTree->data = T->data;
  NewTree->lchild = CopyBinaryTree(T->lchild);
  NewTree->rchild = CopyBinaryTree(T->rchild);
  return NewTree;
  }
  else
  return NULL;
}


简单测试:

int main()
{
  int state,i;
  int NodeBuf[100] = {0};
  Tree* T = FrontCreateTree();
  FrontShowTree(T);
  CountTreeNode(T);
  printf("count = %d\n",count);
  state = DepTreeHeight(T);
  printf("state = %d\n",state);
  CountStateNode(T,1,NodeBuf);
  for(i = 1; i <= state; i++)
  printf("%d-",NodeBuf[i]);
  Tree* NewT = CopyBinaryTree(T);
  FrontShowTree(T);
  return 0;
}


输入如下二叉树数据结构:ABDH I E CFJ K G

(注意输入空格)

image.png

结果如下所示:

image.png

目录
相关文章
|
4天前
|
数据可视化
数据结构——lesson8二叉树的实现
本文介绍了二叉树的基本操作和实现,包括二叉树的构建、销毁、节点个数计算、叶子节点个数、第k层节点个数、查找、高度计算以及判断是否为完全二叉树的方法。通过递归和层序遍历等技巧,详细阐述了这些操作的原理和代码实现。文章以实例和图解帮助读者理解二叉树的各种特性和操作。
|
3天前
|
机器学习/深度学习 分布式数据库
数据结构第六课 -----链式二叉树的实现
数据结构第六课 -----链式二叉树的实现
|
3天前
|
存储 算法 分布式数据库
数据结构第五课 -----二叉树的代码实现
数据结构第五课 -----二叉树的代码实现
|
3天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
4天前
数据结构——二叉树的层序遍历
数据结构——二叉树的层序遍历
|
4天前
数据结构——二叉树的遍历【前序、中序、后序】
数据结构——二叉树的遍历【前序、中序、后序】
|
4天前
|
算法 Java
数据结构奇妙旅程之二叉树题型解法总结
数据结构奇妙旅程之二叉树题型解法总结
|
4天前
|
存储 Java
数据结构奇妙旅程之二叉树初阶
数据结构奇妙旅程之二叉树初阶
数据结构奇妙旅程之二叉树初阶
|
4天前
|
存储 机器学习/深度学习 算法
|
5天前
|
存储 算法
【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历
【数据结构与算法】8.二叉树的基本概念|前序遍历|中序遍历|后序遍历