C语言编程学习之二叉树的遍历图解

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。


小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

1、先序遍历(先访问根节点)

先访问根节点

再先序遍历左子树

再先序遍历右子树

例:下图:先访问根节点A,再先序访问A的左子树B。A的左子树B是一个树 ,所以先访问树B的根节点B,再访问B的左子树D。B的左子树D是一个树,所以先访问D的根节点D,再访问D的左子树,D没有左子树,再访问D的右子树,D没有右子树,那么D访问完毕。再访问D的父亲B的右子树。B没有右子树,那么B访问完毕。这样A的左子树访问完毕,序号为ABD。再访问A的右子树C。先访问C的根节点C,再访问C的左子树E,由于E没有左子树和右子树,所以E访问完毕。再访问C的右子树F。F也是树,所以先访问F的根节点F,再访问F的左子树G。G也是一个数,所以先访问G的根节点G,而G没有左右子树,G访问完毕。再访问G的父亲F的右子树。F没有右子树,所以F访问完毕。因为F是C的右子树,所以F访问完毕则C访问完毕。C访问完毕则整个树访问完毕!

先序b遍历

2、中序遍历(中间访问根节点)

中序遍历左子树

再访问根节点

再中序遍历右节点

例:如下图:

第一步中序遍历A的左子树B,由于左子树B也是树,所以要先访问B的左子树D。由于左子树D也是树,所以要先访问D的左子树,D的左子树为空,所以第1个访问的是左子树的根节点D,再访问D的右子树,D的右子树为空。所以D访问完毕。D访问完毕则B的左子树访问完毕。第2个访问树B的根节点B。再访问B的右子树。因为B的右子树为空,所以B访问完毕。B访问完毕则A的左子树访问完毕,所以第3个访问的是A。再访问A的右子树C。因为C也是树,所以先访问C的左子树E。因为E也是树,所以先访问E的左子树,E的左子树为空,所以第4个访问的是E。再访问E的右子树,E的右子树为空,所以C的左子树访问完毕,接着访问C,所以第5个访问的是节点C。接着访问C的右子树F。因为F是树,所以先访问F的左子树G。因为G也是树,所以先访问G的左子树。G的左子树为空,所以第6个访问的是节点G。再访问G的右子树。G的右子树为空,所以节点G访问完毕。G访问完毕则F的左子树访问完毕,所以第7个访问的是节点F。F的右子树为空,所以F访问完毕,则C的右子树访问完毕,所以A的右子树访问完毕,整个树访问完毕!

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

中序遍历

3、后序遍历(最后访问根节点)

后序遍历左子树

后续遍历右子树

再访问根节点

后续遍历

已知两种遍历序列求二叉树:只有已知一个树的先序和中序或者是后序和中序,才可以还原出二叉树的样子。知道先序和后序是不可以还原出二叉树。

例1、已知先序和中序还原出二叉树:

例1:已知先序:ABCDEFGH

中序:BDCEAFHG

求后序

解:先序中第一个出现的一定是根节点,所以在先序中第一个出现的A是根节点。中序中找出该根节点左边为左子树,右边为右子树。由于中序是先访问左子树再访问根节点再访问右子树。所以在中序中A的左边是A的左子树,所以BDCE是A的左子树;

从先序中找到BDCE的顺序是BCDE所以B是A左子树的根节点;

在中序中B的左边一定是B的左子树。由于B左边没有,所以B没有左子树,DCE是B的右子树;

在先序中DCE三个个节点C是第一个出现的,所以C是B右子树的根节点;

再从中序中D和E分别在C的左右,所以D是C的左子树,E是C的右子树,这样A的左子树确定那个。

再同样确定A的右子树 在中序中A的右边FHG在先序中F第一个出现,所以F是A的右子树的根节点;

再从中序中F左边没有,所以F没有左子树;HG是F的右子树;

再从先序中确定HG第一个出现的是G,所以G是F的右子树的根;

再从中序中G左边是H,右边没有,所以H是G的左子是,G没有右子树。

这样还原出树和后序如下图:

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

例2、已知后序和中序求先序:

已知中序:BDCEAFHG

后序:DECBHGFA

求先序。

解:后序中最后一个一定是根节点,再在中序中找出做右子树。

从后序中求出根节点:A;

从中序中求出A的左子树:BDCE,右子树:FHG;

后序中求出A的左子树BDCE的根结点:B;

中序中求出B的左子树:空,右子树:DCE;

后序中求出树DCE的根节点:C;

中序中求出C的左子树:D,右子树:E;

后序中求出树A的右子树FHG根节点:F;

中序中求出F的左子树:空,右子树:HG;

先序中求出树HG的根节点:G;

中序中求出节点G的左子树:H,右子树:空。

这样还原出二叉树和其先序如下图:

~~~end~~~

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,373评论 1 31
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,653评论 5 14
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,330评论 0 14
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 3,941评论 1 5
  • 好想有个自己的小窝,睡到自然醒,随时外放音乐,穿着内衣起舞。厨房是我的,满足吃货的一切欲望。浴室是我的,在水雾缭绕...
    Grim777阅读 112评论 0 0