题目:
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
抛砖引玉
思路:
深度优先遍历(DFS)
- 递归遍历二叉树
- 推送结果数组的顺序:根节点->左节点->右节点
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function(root) {
let _result = []
function dfs(node) {
if (node === null) return
_result.push(node.val)
if (node.left) dfs(node.left)
if (node.right) dfs(node.right)
}
dfs(root)
return _result
}
广度优先搜索(BFS)
- 从根节点开始依次存放到数组中
- 取出一个节点将节点值存放到结果数组中,并依次推送到数组中(因为只处理的左子树为处理其右子树)
- 如果取出的节点包含左子树优先讲左子树处理完
- 如果左子树处理完成再处理所有节点上的右子树
var preorderTraversal = function(root) {
if (root === null) return []
let queue = [root],
_result = [],
node = queue.pop()
while (queue.length || node !== null) {
while (node != null) {
_result.push(node.val)
queue.push(node)
// 处理左子树
node = node.left
}
node = queue.pop()
// 处理右子树
node = node.right
}
return _result
}
博客: 前端小书童
每天的每日一题,写的题解会同步更新到公众号一天一大 lee 栏目 欢迎关注留言