如何检查二叉树的右侧。在树中搜索项目

Posted

技术标签:

【中文标题】如何检查二叉树的右侧。在树中搜索项目【英文标题】:How to check right side of Binary tree. Search item in a tree 【发布时间】:2021-12-26 04:58:41 【问题描述】:

我有一个数组。

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。

【问题讨论】:

这是一种非常奇怪的存储树的方式 如果像例子中一样,第二个和第三个元素都是数组,第一个ifreturn总是会出现,第二个不会被检查。 【参考方案1】:
  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));

您的代码的唯一问题是它从不检查右子树,因为如果左子树是子树,它会直接返回元素是否在其中。检查是否在左子树中找到了元素,当且仅当它为真时才返回真。这样,您也可以让算法有机会检查正确的子树。为了实现这一点,我做了一个小改动。

【讨论】:

谢谢,我明白了。【参考方案2】:

您可以直接测试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

【讨论】:

以上是关于如何检查二叉树的右侧。在树中搜索项目的主要内容,如果未能解决你的问题,请参考以下文章

搜索二叉树之字典实现

数据结构二叉树的遍历

搜索二叉树应用——简单字典实现

广度优先搜索在树中的应用——判断对称二叉树

树的基础qwq

二叉树刷题篇(完) 二叉搜索树的修剪构造与转换