前序遍历(中左右)
graph TD
前序遍历 --> 中
前序遍历 --> 左
前序遍历 --> 右
中序遍历(左中右)
graph TD
中序遍历 --> 左
中序遍历 --> 中
中序遍历 --> 右
后序遍历(左右中)
graph TD
后序遍历 --> 左
后序遍历 --> 右
后序遍历 --> 中
可以将前中后映射为左中右,先左后右的单向顺序是固定的,前序遍历即左在中间,中序即中在中间,后序即右在中间
以前序遍历为例
题目:给你二叉树的根节点 root ,返回它节点值的 前序 遍历
1、确定递归函数的参数和返回值
题目要求打印出遍历结果,因此,递归函数的参数除了二叉树根节点,还需要有一个数组
const traversal = (root, arr) => {}
2、确定终止条件
在递归的过程中,当前遍历的节点是空了,那么本层递归就要要结束了,直接return,代码如下:
if (!root) return
3、确定单层递归的逻辑
前序遍历是中左右的循序,所以在单层递归的逻辑,是要先取中节点的数值,代码如下:
arr.push(root.val) // 中
traversal(root.left, arr) // 左
traversal(root.right, arr) // 右
完整代码:
const traversal = (root, arr) => {
if (!root) return
arr.push(root.val) // 中
traversal(root.left, arr) // 左
traversal(root.right, arr) // 右
}
const arr = []
traversal(root, arr)
return arr
举一反三,中序遍历、后序遍历只需要调整单层递归逻辑
//中序遍历
const traversal = (root, arr) => {
if(!root) return
traversal(root.left, arr) // 左
arr.push(root.val) // 中
traversal(root.right, arr) // 右
}
const arr = []
traversal(root, arr)
return arr
//后序遍历
const traversal = (root, arr) => {
if(!root) return
traversal(root.left, arr) // 左
traversal(root.right, arr) // 右
arr.push(root.val) // 中
}
const arr = []
traversal(root, arr)
return arr