二叉树的遍历

1.二叉树的结构


节点定义如下:


2.二叉树的遍历方法

2.1 广度优先搜索(Breadth First Search),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,也就是一层一层的遍历,上面二叉树的遍历顺序为:root  -- la --ra --lalb --larb --ralb --rarb

        可以利用队列实现广度优先搜索。代码实现如下:


注:上面用到了队列的offer和poll方法,这里简单记录下这两个方法和以前方法的区别:

(1)offer,add区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。 

(2)poll,remove区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似,

但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

(3)peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。element()与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null


2.2深度优先遍历

深度遍历使用栈数据结构,实现栈的数据结构的容器有Stack和LinkedList,此处使用LinkedList

2.2.1先序遍历:先遍历根节点,然后再遍历左节点和右节点:上面二叉树的遍历结果为

root--la--lalb--larb--ra--ralb--rarb

实现算法如下(递归)


实现算法如下(非递归)

前序遍历比较简单,步骤是先将根结点入栈,然后出栈,并再将根结点右子结点入栈,最后左子结点入栈,依次轮回达到出栈的顺序是:根-左-右

(1)


(2)


2.2.2:中序遍历:先遍历底部左节点,然后是根节点,最后是右节点,上面二叉树的遍历结果是

lalb--la--larb--root--ralb--ra--rarb

实现算法如下(递归)



实现算法如下(非递归)

(1)


(2)

2.2.3:后序遍历:先遍历底

点,上面二叉树的遍历结果是

lalb--larb--la--ralb--rarb--ra--root

实现算法如下(递归)


非递归方式实现


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

推荐阅读更多精彩内容

  • 二叉树的三种常用遍历方式 学习过数据结构的同学都清楚,除了层序遍历外,二叉树主要有三种遍历方式: 1. 先序遍历...
    SherlockBlaze阅读 1,222评论 0 4
  • 二叉树的遍历想必大家都不陌生,主要有三种遍历方式:前序遍历(pre-order traversal),中序遍历(i...
    akak18183阅读 1,110评论 0 1
  • 一、为什么前端需要学习数据结构与算法? 以前的前端页面都是多页面,现在前端的趋势是单页面应用,需要将复杂的逻辑都放...
    Miss_麦兜阅读 587评论 0 0
  • 转载自:http://blog.sina.com.cn/s/blog_70600f720100ujnp.html ...
    shineegirl阅读 1,043评论 0 3
  • 现在决定把自己很久以前的一些文章重新markdown一下,发到简书来,先从这篇二叉树的遍历说起的。大家都知道二叉树...
    董成鹏阅读 362评论 0 1