이진 트리 수준 순서 순회
10662 단어 javascriptleetcode
예 1:
입력: 루트 = [3,9,20,null,null,15,7]
출력: [[3],[9,20],[15,7]]
해결 방법 1: 별도의 행을 유지한 다음 행을 수평으로 밀어 넣습니다.
const levelOrder = (root) => {
// BFS Level Order
// Learning this method will help with all level order problems, graphs and trees
if (!root) return []; // Edge case if root is null
// First we have a queue intialized with the root
let q = [root];
let res = []; // our result array
while (q.length) {
// BFS continues till the queue is empty
const len = q.length; // We need a helper variable for our inner level for loop, this helps us only process for this level
// This loop is for processing all queue items on each LEVEL of the tree
const levelArray = []; // Used to hold all values from this level
for (let i = 0; i < len; i++) {
const n = q.shift(); // We get first item in queue
levelArray.push(n.val); // Push node value to the levelArray
// We need to queue up all the children of the current node, if they exist
n.left && q.push(n.left);
n.right && q.push(n.right);
// The above is the same as:
// if(n.left) q.push(n.left)
}
// Once we process all nodes for this level, push levelArray to result array
res.push(levelArray);
}
return res;
};
해결 방법 2: 동일한 배열 수준 유지 및 기본적으로 비어 있음 및 빈 수준에서 요소 푸시
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
if (!root) return [];
let queue = [root];
let levels = [];
while (queue.length > 0) {
let levelSize = queue.length;
levels.push([]);
for (let i = 0; i < levelSize; i++) {
let curr = queue.shift();
levels[levels.length - 1].push(curr.val);
if (curr.left) queue.push(curr.left);
if (curr.right) queue.push(curr.right);
}
}
return levels;
};
솔루션 3: 재귀를 통해
var levelOrder = function(root) {
let result = [];
let level = 0;
const readNode = function(node, level) {
if (!node) return;
if (!result[level]) {
result.push([node.val]);
} else {
result[level].push(node.val);
}
readNode(node.left, level + 1);
readNode(node.right, level + 1);
}
readNode(root, level);
return result;
};
Reference
이 문제에 관하여(이진 트리 수준 순서 순회), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zeeshanali0704/binary-tree-level-order-traversal-37pb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)