[英]Maximum Depth of N-ary Tree when use BFS
為了獲得一棵nary樹的最大深度,下面的代碼是正確的答案。
var maxDepth = function(root) {
if (!root) {
return 0
}
let depth = 0;
let arr=[root];
while (arr.length) {
let arrlength=arr.length;
for (let i=0;i<arrlength;i++) {
let curr=arr.shift();
arr.push(...curr.children);
}
depth++;
}
return depth;
};
但是,如果我在for循環中使用arr.length而不是使用“ let arrlength = arr.length;” 並使用arrlength,這將是一個錯誤的答案...我可以知道為什么嗎? 我說不出任何區別。 非常感謝!
var maxDepth = function(root) {
if (!root) {
return 0
}
let depth = 0;
let arr=[root];
while (arr.length) {
for (let i=0;i<arr.length;i++) {
let curr=arr.shift();
arr.push(...curr.children);
}
depth++;
}
return depth;
};
可以在這里進行測試: https : //leetcode.com/problems/maximum-depth-of-n-ary-tree/
let curr = arr.shift()
從數組中刪除第一個元素,並將其分配給curr
。
arr.push(...curr.children)
將所有子項添加到數組的末尾。
這兩個操作都會改變數組的長度,並且每次測試i < arr.length
使用當前長度。 但是循環僅應處理原始數組元素。 arrlength
包含循環之前數組的原始長度。 修改數組后它不會改變,因此循環將操作正確的次數。
如果在循環之前制作了arr
的副本,並在其上循環而不是修改要循環的數組,則可以在循環中使用.length
。
var maxDepth = function(root) { if (!root) { return 0 } let depth = 0; let arr = [root]; while (arr.length) { let copy = [...arr]; arr.splice(0, arr.length); for (let i = 0; i < copy.length; i++) { let curr = copy[i]; arr.push(...curr.children); } depth++; } return depth; }; const tree = { value: 1, children: [{ value: 3, children: [{ value: 5, children: [] }, { value: 6, children: [] }] }, { value: 2, children: [] }, { value: 3, children: [] } ] }; console.log(maxDepth(tree));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.