簡體   English   中英

當某些節點為 null 時,二叉樹搜索不返回匹配值

[英]Binary tree search not returning matching value when some nodes are null

TL;DR - 如何更改此算法以返回給定具有 null 節點的 BST 的匹配 val?

樹節點:

/**
 * 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
 * @param {number} val
 * @return {TreeNode}
 */

給定一棵二叉樹,找到匹配的 val。 我的算法如下

var searchBST = function(root, val) {
    const matchingNode = visitNode(root, val);
    // if no match, return null
    return matchingNode ? matchingNode : null;
};

const visitNode = (node, val) => {
    if (node.left !== null) {
        return visitNode(node.left, val)
    }
    if (node.right !== null) {
        return visitNode(node.right, val)
    }
    if (node.val === val) {
        console.log('MATCH!')
        return node;
    }
}

這適用於沒有null值的標准樹,例如 [4,2,7,1,3] 和空樹 []。

I'm having an issue with trees that have null nodes, such as [18, 2, 22, null, null, null, 63, null, 84, null, null].

function 似乎過早停止。 如果我刪除前兩個 if 塊中的返回,我可以在匹配的 val 處停止遞歸,但無法獲得要返回的值。

如何更改此算法以返回給定具有 null 節點的 BST 的匹配 val?

您可以考慮下面的visitNode()重構版本。 基本情況發生在傳入節點是null時,在這種情況下 function 只返回null 否則,它會檢查當前節點是否與尋求的值匹配。 如果不是,則它遞歸地遍歷左或右。

const visitNode = (node, val) => {
    if (node == null) return null;

    if (node.val === val) {
        console.log('MATCH!')
        return node;
    }

    if (val < node.val) {
        return visitNode(node.left, val);
    }
    else {
        return visitNode(node.right, val)
    }
}

如果你正在尋找二叉搜索樹,試試這個

if (node == null || node.val === val) 
   return node;
 
// val is greater than node's val
if (node->val < val) 
   return visitNode(node.right, val); 

// val is smaller than node's val
return visitNode(node.left, val); 

或者你必須通過DFSBFS遍歷樹

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM