数据结构—深度遍历二叉树

142 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

前言

说到遍历二叉树,大家肯定都不陌生。想当年上数据结构这门课程的时候,老师给出二叉树,让我们给出遍历的结果,那个过程对于初学者可真是痛苦绝望阿。

遍历

遍历就是按某条搜索路径访问树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。

深度遍历

这篇文章主要讲述深度遍历。二叉树的遍历有前序遍历、中序遍历、后序遍历。

二叉树由根、左子树、右子树构成,三者的组合可构成6种 遍历方案:根左右、根右左、左根右、左右根、右根左、右左根。如果限定先左后右则有三种实现方案:

  1. 根左右——先序遍历
  2. 左根右——中序遍历
  3. 左右根——后序遍历

当时老师讲了很多怎么去遍历(根据一个二叉树,写出它的前中后序遍历结果),虽然记住了但是也是不理解为什么要这样做。当时记得听了MOOC上的一节课有了一点点明朗。

老师说前序、中序、后序遍历过程中经过节点的路线一样,只是访问节点的时机不同。就像这张图表示的。

image.png

直到开始刷题我才真正理解这句话(所以理论不要脱离实践 大家要好好自学呀)。

下面是前序遍历递归做法:

var preorderTraversal = function(root) {
 let res=[];
 const dfs=function(root){
     if(root===null)return ;
     //先序遍历所以从父节点开始
     res.push(root.val);
     //递归左子树
     dfs(root.left);
     //递归右子树
     dfs(root.right);
 }
 dfs(root);
 return res;
};

在递归中,前序、中序、后序遍历只是节点存入数组中的顺序不同,其他都是一样的!

后记

永远不要让理论脱离实践!