题目:
二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:
定义递归函数三个值分别是:当前节点,返回数组,当前层数。
如果数组的长度大于等于当前层数则在新建一个二维数组,
将当前节点的值加到当前层数二维数组的后面,
然后对左右子树进行遍历,因为子树是下一层的节点所以遍历时层数应当+1。
代码:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var emmm=function(root,num,b){
if(root!=null){
var c=num.length;
if(c==b)
num[c]=new Array();
num[b].push(root.val);
if(root.left!=null)
emmm(root.left,num,b+1);
if(root.right!=null)
emmm(root.right,num,b+1);
return num;
}
}
var levelOrder = function(root) {
var num=new Array();
var b=0;
if(root==null)
return num;
num=emmm(root,num,b);
return num;
};
leetcode标准答案:
/**
* 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 [];
const arr = [];
bfs(root, 0, arr);
return arr;
};
const bfs = (node, depth, arr) => {
if(!node) return;
if(!arr[depth]) arr[depth] = [];
arr[depth].push(node.val);
bfs(node.left, depth + 1, arr);
bfs(node.right, depth + 1, arr);
}