开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情
引言
算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。
题目描述
给你二叉树的根节点 root ,返回它节点值的 前序 **遍历。
示例 1:
输入: root = [1,null,2,3]
输出: [1,2,3]
示例 2:
输入: root = []
输出: []
示例 3:
输入: root = [1]
输出: [1]
示例 4:
输入: root = [1,2]
输出: [1,2]
示例 5:
输入: root = [1,null,2]
输出: [1,2]
提示:
- 树中节点数目在范围
[0, 100]内 -100 <= Node.val <= 100
分析
根据题目的分析,我们如何求二叉树的前序遍历?根据前序遍历的特点,我们可以设计如下的递归遍历方式。
- 设计递归遍历函数,函数的结束条件是当前节点是空
- 访问当前节点,然后递归
- 递归访问左孩子
- 递归访问右孩子
- 收集最后的结果返回。
解答
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function(root) {
let res = []
const main = node => {
if(node) {
res.push(node.val)
main(node.left)
main(node.right)
}
}
main(root)
return res
};
根据代码,我们发现二叉树的前序遍历递归实现还是比较容易的,通过轻松的方式完成了题目的解答过程。
总结
二叉树的前序遍历是十分经典重要的设计过程,我们通过递归或者非递归都可以完成遍历。