这几天在写数据结构中的二叉树遍历时,发现最困扰的问题是递归与非递归,dfs,bfs的实现需要建立在完整的二叉树结构上。
看了几篇博客后,我把自己对于二叉树建立时的注意事项与大家分享下:
二叉树的建立主要有数组与链表两种形式,如果建立的是完全二叉树,本人推荐使用数组,用下标进行容易理解,出错率低。今天我主要介绍的是使用链表存储二叉树。
在使用链表存储时一定要给子节点打上标记,你可以使用输入0时到达子节点,也可以使用输入#时到达子节点,取决于你输入的数据是int还是char,使用链表存储时是使用递归前序法建树,优点是代码量少,容易理解。
下面直接上代码:

定义树的基本结构

typedef struct node
{char str;node* lc;node* rc;
}tree;
tree* root;

递归法建立二叉树

tree* InPut()
{char c;tree *root;scanf("%c",&c);if (c!='#') {root=(tree*)malloc(sizeof(tree));root->str=c;root->lc=InPut();root->rc=InPut();}else root=NULL;return root;
}

这里因为我后面的操作是对字符操作所以我选择了#最后结束标志
那么什么时候输入#呢:
遇到子节点输入节点字符之后需要连续输入两个#因为他的左右节点都是空的所以需要输入两个,如果该节点右子树为空则在输入该节点字符后输入一个#,原因同上。

接下来我使用的是bfs遍历二叉树,网上dfs代码很多而且很简单就不多赘述,我分享bfs代码给大家

void bfs(tree* a)
{queue<tree*> q_tree;if (a!=NULL) {q_tree.push(a);}else return;while (!q_tree.empty()) {tree* node=q_tree.front();printf("%3c",node->str);if (node->lc!=NULL) {q_tree.push(node->lc);}if (node->rc!=NULL) {q_tree.push(node->rc);}q_tree.pop();}
}

主函数

int main()
{root=InPut();bfs(root);
}

下面我先讲解一下这里的BFS遍历,BFS就是广度优先搜索,与DFS深度优先搜索齐名,DFS主要是采用递归的方法由第一层遍历到最后一层再回溯,而BFS是利用队列这个数据结构将要访问的节点暂时保存下来,达到一行一行访问的效果。因为采取的是先根节点再左节点,右节点的顺序输出,所以在入队列的时候先入队左子树再入队右子树。

二叉树输入与存储的问题相关推荐

  1. c语言二叉树链式存储,C语言 二叉树的链式存储实例

    二叉树的链式存储 实现二叉树的基本操作:建立.遍历.计算深度.结点数.叶子数等. 输入C,先序创建二叉树,#表示空节点: 输入H:计算二叉树的高度: 输入L:计算二叉树的叶子个数: 输入N:计算二叉树 ...

  2. c语言二叉树链式存储,二叉树链式存储基本操作(C语言)

    1.二叉链的定义 LinkBinTree.h文件 /** 二叉树结点结构 */ typedef struct _binnode { int data; struct _binnode * lchild ...

  3. DS二叉树--二叉树之数组存储

    二叉树可以采用数组的方法进行存储,把数组中的数据依次自上而下,自左至右存储到二叉树结点中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点就在数组中用0来表示.,如下图所示 从上图可以看出,右边的是 ...

  4. 【CCCC】L2-030 冰岛人 (25分) 模拟题,二叉树链式存储,从底部向上

    problem L2-030 冰岛人 (25分) 2018年世界杯,冰岛队因1:1平了强大的阿根廷队而一战成名.好事者发现冰岛人的名字后面似乎都有个"松"(son),于是有网友科普 ...

  5. 线索二叉树(基于链表存储树结点)

    有以下场景 如果使用中序遍历,那么得到的顺序是:HDIBEAFCG,可以得知A的前驱结点为E,后继结点为F.但是,这种关系的获得是建立在完成遍历后得到的.如果我们每次想得到某个节点的前驱或者后继,都要 ...

  6. 二叉树的链表存储与遍历

    终于进入了二叉树的学习章节,二叉树的存储结构包括数组存储和链表存储,我主要介绍链表存储,数组存储也是类似的. #include<stdio.h> #include<stdlib.h& ...

  7. 计算机语音输入和存储,语音输入输出装置

    语音输入输出装置是指将人的语音信息直接输入或输出计算机的人机接口装置.人们在日常生活中大部分是通过语音来传递信息的,因此语音输入输出装置是人机接口装置的重要发展方向. 中文名 语音输入输出装置外文名 ...

  8. c语言 怎么输出结点,c语言 线索二叉树 输入结点 输出前驱后继,大神们救命啊!!1...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include //定义结构体 typedef struct BiThrNode { int data; struct BiThrNo ...

  9. php之二叉树,数据结构之二叉树——链式存储结构(php代码实现)

    /** * ClearBiTree() 清空二叉树 * CreateBiTree() 创建二叉树 * BiTreeEmpty() 判断二叉树是否为空 * BiTreeDepth() 返回二叉树的深度 ...

最新文章

  1. mysql null 排前面_Mysql实现null值排在最前/最后的方法示例
  2. yum安装etcd集群
  3. 双引擎驱动Quick BI十亿数据0.3秒分析,首屏展示时间缩短30%
  4. tp6 使用lock_tp5 lock的使用
  5. python go rpc_Go实现简易RPC框架的方法步骤
  6. 如何控制修改UIWebView中的UIScrollView
  7. 科比生涯自述:忍受,然后征服——这就是曼巴精神
  8. Element-UI中Select选择器讲解(el-select详解)
  9. 【2019上海网络赛:D】Counting Sequences I(dfs+多重集合排列)
  10. 解决apicloud中真机同步海马玩模拟器中每次都要升级apploader的问题
  11. 安卓模拟器安装教程_雷电安卓模拟器v4.0.38绿色免安装版——墨涩网
  12. c语言中怎么避免整数除法,大整数除法
  13. ps基础入门3-文字样式
  14. scrapy.spiders.crawl.CrawlSpider类的使用
  15. 知网CAJ转为PDF下载
  16. 北风:在给我一面国旗换头像中,有人通过这个来获利吗?(亲身经历)
  17. 男人应该做的50件事(1-16)
  18. 【cdq分治】cdq分治与整体二分学习笔记Part2.cdq分治
  19. IC从业人员基础:计算机基础知识缩写
  20. python-英雄联盟购买界面

热门文章

  1. lte协议软件 开源的4g_lte协议软件 开源的4g_Wi-Fi和4G大PK!谁网速快?谁耗电多?和你想的一样吗?...
  2. Association Rules_python关联规则
  3. [动态规划] NKOJ 4250 小区划分
  4. C++实现别踩白块儿(双人版)
  5. Qt中文帮助文档-QX11Info
  6. VBA用字典实现分类汇总(二)
  7. C语言实现鼠标连点器
  8. 长沙小学计算机老师,2019下半年湖南长沙小学信息技术教师资格证面试试题考什么内容...
  9. 考研快题平面图,如何用马克笔去上色?
  10. 和leon一起从头学Git(五)