关于层序遍历,可以去看leetcode上102. 二叉树的层序遍历]的题目描述。
题目:
相关话题:树、广度优先搜索
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如: 给定二叉树: [3,9,20,null,null,15,7] ,
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
代码:
迭代(bfs):
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
if(!root) return []
let res = []
let queue = [root]
while(queue.length>0){
let len = queue.length
let vals=[]
for(let i=0;i<len;i++){
let node = queue.shift()
vals.push(node.val)
node.left && queue.push(node.left)
node.right && queue.push(node.right)
}
res.push(vals)
}
return res;
};
递归(dfs):
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
let res = [];
const dfs = (root,level) => {
if(!root) return;
if(level===res.length){
res.push([])
}
res[level].push(root.val)
root.left && dfs(root.left,level+1)
root.right && dfs(root.right,level+1)
}
dfs(root,0);
return res;
};