美文网首页
树的深度优先遍历 GO语言实现

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

作者: 半亩水田 | 来源:发表于2018-03-12 00:39 被阅读0次

主要是迭代实现

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

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

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

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

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

对于后序遍历,父节点最后访问,保存完父节点,先保存左子树,访问,之后通过父节点保存右子树,访问,之后再访问父节点。也就是父节点会多路过一次。父节点访问前要判断左右子树已经都访问过了。因为回溯到父节点,左子树一定已经访问过,因此就是要判断右子树访问过没有。右子树访问之后,紧接就是父节点的访问,因此可以用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)

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

相关文章

  • 多级树的深度优先遍历与广度优先遍历(Java实现)

    多级树的深度优先遍历与广度优先遍历(Java实现) 深度优先遍历与广度优先遍历其实是属于图算法的一种,多级树可以看...

  • 5. 深度优先、广度优先

    1. 二叉树的深度优先遍历和广度优先遍历2. 深度优先搜索递归和非递归实现 深度优先(DFS):前序遍历 广度优先...

  • 前端常见面试题目(六)

    一、介绍下深度优先遍历和广度优先遍历,如何实现 通过用深度优先遍历和广度优先遍历对这个dom树进行查找来理解1、 ...

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

    主要是迭代实现 深度优先使用栈,广度优先使用队列 使用栈,主要是为了暂存之后会用的父节点。每个节点都可以作为父节点...

  • 数据结构与算法学习-图的遍历

    图的遍历可以分为:深度优先遍历和广度优先遍历 一、深度优先遍历 深度优先遍历的实现思路 将图的顶点和边信息输⼊入到...

  • 重建二叉树——jzoffer

    关于树,面试的时候多考察的是二叉树 宽度优先遍历和深度优先遍历 其中深度优先遍历: 前序遍历class Solut...

  • 深度优先和广度优先遍历算法

    DFS深度优先遍历 深度优先遍历结果: DFS递归实现:深度优先需要优先查找子节点,因此需要实现后进先出(栈) 递...

  • 二叉树遍历

    二叉树的遍历,分为深度优先遍历和广度优先遍历,其中深度优先遍历又分为有前序、中序、后序遍历,广度优先遍历就是按层遍...

  • jsoup:遍历一棵树

    深度优先遍历 dom 树

  • 二叉树的深度遍历和广度遍历

    1. 深度优先遍历 1.1关于深度优先遍历 沿着树的深度遍历结点,尽可能深的搜索树的分支。如果当前的节点所在的边都...

网友评论

      本文标题:树的深度优先遍历 GO语言实现

      本文链接:https://www.haomeiwen.com/subject/kqvwfftx.html