我有一個陣列。
const arr1 = [3, [ 8, [ 5, 4, null], 11], [ 7, [ 1, 0, null], null]]
我想寫一個函式,它應該檢查給定的值是否在樹中。
這是我的功能。
function valueInTree(tree, val) {
if(tree[0] === val || tree[1] === val || tree [2] === val){
return true;
}
if (Array.isArray(tree[1])){
return valueInTree(tree[1],val)
}
if (Array.isArray(tree[2])){
return valueInTree(tree[2],val);
}
return false;
}
console.log(valueInTree(arr1, 72));
下面是給定陣列的視覺效果。
// 3
// / \
// 8 7
// /\ /\
// 5 11 1 N
// /\ / \
// 4 72 0 N
所以,我的問題。如您所見,我的函式無法檢查樹的右側。例如,它可以找到數字 3、8、5 和 4。但是當我嘗試找到 7 或 11 時,它回傳 false。
uj5u.com熱心網友回復:
您可以tree直接測驗然后檢查該值是否不是陣列,然后回傳 false 否則檢查左側或右側部分。
function valueInTree(tree, val) {
if (tree === val) return true;
if (!Array.isArray(tree)) return false;
if (tree[0] === val) return true;
return valueInTree(tree[1], val) || valueInTree(tree[2], val);
}
const tree = [3, [8, [5, 4, null], 11], [7, [1, 0, null], null]]
console.log(valueInTree(tree, 72)); // false
console.log(valueInTree(tree, 1)); // true
console.log(valueInTree(tree, 0)); // true
uj5u.com熱心網友回復:
function valueInTree(tree, val) {
if(tree[0] === val || tree[1] === val || tree [2] === val){
return true;
}
if (Array.isArray(tree[1])){
if (valueInTree(tree[1],val))
return true
}
if (Array.isArray(tree[2])){
return valueInTree(tree[2],val);
}
return false;
}
console.log(valueInTree(arr1, 72));
您的代碼唯一的問題是它從不檢查右子樹,因為如果左子樹是子樹,它會直接回傳元素是否在其中。檢查元素是否在左子樹中找到,當且僅當它為真時才回傳真。通過這種方式,您也可以讓演算法有機會檢查正確的子樹。我做了一個小小的改變來實作這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359127.html
標籤:javascript 数组 算法 递归 二叉树
上一篇:遍歷串列,計數重置為0
