手摸手提桶跑路——使用 DFS 进行二叉树的遍历

812 阅读2分钟

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

二叉树的遍历

二叉树的遍历(traversing binary tree) 是指从 根结点 出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点 被访问依次且仅被访问一次

我们先假设有这么一颗二叉树:

捕获.PNG

前序遍历

什么叫前序遍历呢?

前序遍历的概念

我们都知道二叉树是由一个个节点组成的,没有节点它就是颗空树。而对于一颗 非空二叉树 来说,必然有一个根节点 root。子节点可以有无数个,而根节点只能有一个,孰轻孰重高下立判了吧,因此,我们常说的前序、中序或者是后续遍历,意思就是将 root 节点放在什么位置进行遍历。

结论为先,对于上图来说,前序遍历结果为 [1,2,4,5,3]

捕获.PNG

按照刚刚的说法,root 节点先遍历,那为什么第二个遍历到的是 2 呢?

这是有一定顺序的,前序 [root、left、right] ,中序 [left、root、right] ,后序 [left、right、root] ,可以发现不管怎么遍历,左节点都是先于右节点遍历的。

前序遍历的基本模板

 const trverse = (node) => {
    if(node == null || !node || node.length == 0) return;
    console.log(node.val);
    trverse(node.left);
    trverse(node.right);
};

中序遍历

中序遍历的概念

通过上面的讲解我们可以知道,中序遍历就是将 root 放在中间的位置进行遍历,也就是 [left、root、right]

对于上图来说,中序遍历的结果是 [4,2,5,1,3]

中序遍历的基本模板

 const trverse = (node) => {
    if(node == null || !node || node.length == 0) return;
    trverse(node.left);
    console.log(node.val);
    trverse(node.right);
};

后序遍历

后序遍历的概念

通过上面的讲解我们可以知道,后序遍历就是将 root 放在最后进行遍历,也就是 [left、right、root]

对于上图来说,后序遍历的结果是 [4,5,2,3,1]

后序遍历的基本模板

 const trverse = (node) => {
    if(node == null || !node || node.length == 0) return;
    trverse(node.left);
    trverse(node.right);
    console.log(node.val);
};

巩固题