102. 二叉树的层序遍历【中等题】
题目链接
function TreeNode(val, left, right) {
this.val = (val===undefined ? 0 : val)
this.left = (left===undefined ? null : left)
this.right = (right===undefined ? null : right)
}
function initTree(valList) {
const treeNodeList = [];
const sum = valList.length;
valList.forEach((el, index) => {
if (!el) {
treeNodeList.push(null);
return;
}
const leftIndex = index*2+1 < sum ? index*2+1: null;
const rightIndex = index*2+2 < sum ? index*2+2 :null;
const newNode = new TreeNode(el, leftIndex, rightIndex);
treeNodeList.push(newNode);
});
treeNodeList.forEach(node=>{
if(node && node.left) {
node.left = treeNodeList[node.left];
}
if(node && node.right){
node.right = treeNodeList[node.right];
}
});
return treeNodeList[0];
}
function obj2array(obj) {
const res = [];
Object.keys(obj).forEach(key=>{
res.push(obj[key]);
});
return res;
}
var levelOrder = function(root) {
if (!root) return [];
let queue = [root];
let resObj = {};
root.level = 0;
while(queue.length) {
const curNode = queue.pop();
const nextLevel = curNode.level + 1;
if (!resObj[curNode.level]) {
resObj[curNode.level] = [];
}
resObj[curNode.level].push(curNode.val);
if(curNode.left) {
curNode.left.level = nextLevel;
queue.unshift(curNode.left);
}
if(curNode.right) {
curNode.right.level = nextLevel;
queue.unshift(curNode.right);
}
}
const res = obj2array(resObj);
return res;
};
function validate() {
const input = [2];
const root = initTree(input);
console.log('root', root);
const result = levelOrder(root);
console.log('result', result);
}
validate();