持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
二叉树的遍历
二叉树的遍历(traversing binary tree) 是指从 根结点 出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点 被访问依次且仅被访问一次。
我们先假设有这么一颗二叉树:
前序遍历
什么叫前序遍历呢?
前序遍历的概念
我们都知道二叉树是由一个个节点组成的,没有节点它就是颗空树。而对于一颗 非空 的 二叉树 来说,必然有一个根节点 root
。子节点可以有无数个,而根节点只能有一个,孰轻孰重高下立判了吧,因此,我们常说的前序、中序或者是后续遍历,意思就是将 root
节点放在什么位置进行遍历。
结论为先,对于上图来说,前序遍历结果为 [1,2,4,5,3]
。
按照刚刚的说法,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);
};