0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

二叉树的代码实现

冬至子 来源:计算机科学实验室 作者:好坏生长 2023-01-18 10:41 次阅读

二叉树是一种特殊的树型结构,一般都以二叉树作为树型结构学习的案例讲解。

2.jpg

二叉树的主要操作有遍历,例如有先序遍历、中序遍历、后序遍历。在遍历之前,就是创建一棵二叉树,当然,还需要有删除二叉树的算法

以二叉树的创建、删除、先序遍历为例,实现代码如下

#include 
#include 


typedef char ElemType;
typedef struct node
{  ElemType data;
  struct node *lchild, *rchild;
} BTNode;      




BTNode * createTree(BTNode *tree){
  ElemType e; 
  fflush(stdin);
  scanf("%c", &e);
  if(e != '#'){
    tree = (BTNode *)malloc(sizeof(BTNode));
    tree->data = e; tree->lchild = NULL; tree->rchild = NULL;
    tree->lchild = createTree(tree->lchild);
    tree->rchild = createTree(tree->rchild);
  }
  return tree;
}


void DestroyBTree(BTNode *b)
{  if (b==NULL) return ;
  else
    {  DestroyBTree(b->lchild);
      DestroyBTree(b->rchild);
      free(b);           
  }
}


void PreOrder(BTNode *b)
{  if (b!=NULL)  
   {  printf("%c ",b->data); 
   PreOrder(b->lchild);
   PreOrder(b->rchild);
}
}


int main(){
  BTNode *tree = createTree(tree);


  PreOrder(tree);


  DestroyBTree(tree);
  return 0;
}

测试用例如下

A
B
D
#
G
#
#
#
C
E
#
#
F
#
#
A B D G C E F

以上测试用的测试案例,就是上述二叉树图形的结构,二叉树构成过程中,以先序的方式创建,子树为空的时候,输入为#

上述算法中,还可以做更多的优化,每一个优化都是一次进步。

审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二叉树
    +关注

    关注

    0

    文章

    74

    浏览量

    12324
收藏 人收藏

    评论

    相关推荐

    计算机二叉树的问题

    各位大神,本人马上要考计算机级了,那个二叉树老是弄不明白,比如一个题目,一棵二叉树共有25个节点,其中五个叶子节点,则度为1的节点数为?
    发表于 09-04 09:45

    基于二叉树的时序电路测试序列设计

    为了实现时序电路状态验证和故障检测,需要事先设计一个输入测试序列。基于二叉树节点和树枝的特性,建立时序电路状态二叉树,按照电路二叉树节点(状态)与树枝(输入)的层次逻辑
    发表于 07-12 13:57 0次下载
    基于<b class='flag-5'>二叉树</b>的时序电路测试序列设计

    二叉树层次遍历算法的验证

    实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。
    发表于 11-28 01:05 2096次阅读
    <b class='flag-5'>二叉树</b>层次遍历算法的验证

    二叉树,一种基础的数据结构类型

    然后我们再定义一棵深度也为 3 的二叉树,该二叉树的 n 个结点(n≤7),当从 1 到 n 的每个结点都与上图中的编号结点一一对应时,这二叉树就称为完全二叉树
    的头像 发表于 04-13 10:48 4352次阅读
    <b class='flag-5'>二叉树</b>,一种基础的数据结构类型

    详解电源二叉树到底是什么

    作为数据结构的基础,分很多种,像 AVL 、红黑二叉搜索....今天我想分享的是关于二叉树
    的头像 发表于 06-06 15:05 1w次阅读
    详解电源<b class='flag-5'>二叉树</b>到底是什么

    C语言二叉树代码免费下载

    本文档的主要内容详细介绍的是C语言二叉树代码免费下载。
    发表于 08-27 08:00 1次下载

    红黑(Red Black Tree)是一种自平衡的二叉搜索

    平衡(Balance):就是当结点数量固定时,左右子树的高度越接近,这棵二叉树越平衡(高度越低)。而最理想的平衡就是完全二叉树/满二叉树,高度最小的二叉树
    的头像 发表于 07-01 15:05 5701次阅读
    红黑<b class='flag-5'>树</b>(Red Black Tree)是一种自平衡的<b class='flag-5'>二叉</b>搜索<b class='flag-5'>树</b>

    二叉树操作的相关知识和代码详解

    是数据结构中的重中之重,尤其以各类二叉树为学习的难点。在面试环节中,二叉树也是必考的模块。本文主要讲二叉树操作的相关知识,梳理面试常考的内容。请大家跟随小编一起来复习吧。 本篇针对面
    的头像 发表于 12-12 11:04 2042次阅读
    <b class='flag-5'>二叉树</b>操作的相关知识和<b class='flag-5'>代码</b>详解

    二叉树的前序遍历非递归实现

    我们之前说了二叉树基础及二叉的几种遍历方式及练习题,今天我们来看一下二叉树的前序遍历非递归实现。 前序遍历的顺序是, 对于中的某节点,先遍
    的头像 发表于 05-28 13:59 1954次阅读

    C语言数据结构:什么是二叉树

    完全二叉树:完全二叉树是效率很高的数据结构。对于深度为K,有n个节点的二叉树,当且仅当每一个节点都与深度为K的满二叉树中编号从1至n的节点一一对应时,称为完全
    的头像 发表于 04-21 16:20 2509次阅读

    怎么就能构造成二叉树呢?

    一直跟着公众号学算法的录友 应该知道,我在二叉树:构造二叉树登场!,已经讲过,只有 中序与后序 和 中序和前序 可以确定一颗唯一的二叉树。前序和后序是不能确定唯一的二叉树的。
    的头像 发表于 07-14 11:20 1581次阅读

    二叉树的最大深度

    精简之后的代码根本看不出是哪种遍历方式,也看不出递归三部曲的步骤,所以如果对二叉树的操作还不熟练,尽量不要直接照着精简代码来学。
    的头像 发表于 07-26 11:28 1073次阅读

    使用C语言代码实现平衡二叉树

    这篇博客主要总结平衡二叉树,所以,二叉排序树知识不会提及,但是会用到。
    的头像 发表于 09-21 11:00 1093次阅读

    C++构建并复制二叉树

    使用C++构建一个二叉树并复制、输出。
    的头像 发表于 01-10 15:17 1015次阅读
    C++构建并复制<b class='flag-5'>二叉树</b>

    C++自定义二叉树并输出二叉树图形

    使用C++构建一个二叉树并输出。
    的头像 发表于 01-10 16:29 1746次阅读
    C++自定义<b class='flag-5'>二叉树</b>并输出<b class='flag-5'>二叉树</b>图形