树的深度优先遍历 GO语言实现

主要是迭代实现

深度优先使用栈,广度优先使用队列

使用栈,主要是为了暂存之后会用的父节点。每个节点都可以作为父节点。

前序遍历比较简单,中序遍历和后序遍历思路比较接近。

对于前序遍历,父节点首先(直接)访问,而且用过就不会再用了。之后先存右,再存左。然后取左,重复。父节点不需要被回溯

对于中序遍历,父节点在访问过左子树后访问,即访问前要先保证左子树为空或者访问过,所以是先保存,后访问,访问完再保存右子树,然后访问右子树。

对于后序遍历,父节点最后访问,保存完父节点,先保存左子树,访问,之后通过父节点保存右子树,访问,之后再访问父节点。也就是父节点会多路过一次。父节点访问前要判断左右子树已经都访问过了。因为回溯到父节点,左子树一定已经访问过,因此就是要判断右子树访问过没有。右子树访问之后,紧接就是父节点的访问,因此可以用last变量记录上一次访问的地方。

判断回溯的标准,就是当前遍历节点为nil,此时只能从栈中取一个出来。取出来的也就是父节点,根据中序或者后序,决定是否转到右节点。对于后序,访问完父节点就是访问上一个父节点,因此当前节点要置nil;对于中序,访问完父节点,访问右子树,因此转到右子树,右子树为空,则再转。 

144. Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes' values.

迭代实现,利用后进先出的栈实现,

首先利用数组实现一个简单的栈,(也可以直接用数组写在代码当中,分开写虽然需要建立的新的数据结构,但是思路会更清晰,何况其他语言大部分都是有现成的栈结构可用。。)

根节点不放栈中,当前节点为根节点

 当前节点不为空,则读取当前节点,栈保存当前节点的两个子节点,

 栈不为空,则从栈中重新取一个节点,迭代

94. Binary Tree Inorder Traversal

Given a binary tree, return the inorder traversal of its nodes' values.

145. Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values.

树的后序遍历

注意,调用结构体的成员,要记得加先绑定到实例上,不要直接使用变量名。

注意,把for循环误写成if,好久才发现!!!(前序是if,但是后两者是for)

后序遍历的关键就是或者转右,或者访问当前,访问当前,如果当前节点不是空,则要将当前节点置空

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

推荐阅读更多精彩内容

  • 编译环境:python v3.5.0, mac osx 10.11.4 前述内容: 线性表 队列 堆栈 线性结构...
    掷骰子的求阅读 2,426评论 1 7
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,445评论 1 31
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,741评论 5 14
  • 基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平...
    yhthu阅读 4,268评论 1 5
  • 1. 不要为了省钱买16G的手机 2. 千万不要在晚上做任何决定 3. 永远留住30%的神秘 4. 男生记住媳妇永...
    红鼻子姑娘阅读 376评论 0 0