给你二叉树的根节点 root
,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
只用一个循环while遍历栈s的长度,每层使用arr1保存本层的节点,用arr2保存本层节点的子节点,当s遍历结束(s.length==0),则把子节点数组arr2赋值给s,并把本层的节点arr1赋值给结果数组,置空arr1,arr2
注意:arr1和arr2要在循环外初始化
var levelOrderBottom = function(root) {
let arr=[] //保存结果
let s=[] //栈
if(root==null){
return arr
}
s.push(root)
let arr1=[] //本层
let arr2=[] //子节点数组,用于和s交换
while(s.length){
let node=s.shift()
arr1.push(node.val)
node.left&&arr2.push(node.left)
node.right&&arr2.push(node.right)
if(s.length===0){
arr.push(arr1)
s=[...arr2]
arr1=[]
arr2=[]
}
}
return arr.reverse()
};