簡體   English   中英

如果在二叉樹(不是 BST)上找到值,如何停止有序 DFS 遍歷

[英]How to stop In-order DFS traversal if value is found on a binary tree (not BST)

我有以下功能用於按順序 DFS 遍歷。 如果找到匹配的值,我希望遍歷停止並返回 true。 但它不起作用,即使該值在樹中,它也會返回 false。 這個功能有什么問題?

inOrderDfs(node, value) {
    if (!node) {
      return;
    }
    
    if (node.left) this.inOrderDfs(node.left, value);
    if (node.value === value) return true;
    if (node.right) this.inOrderDfs(node.right, value);

    return false;
  }

當滿足這些條件時,您不會返回,因此它會一直到底部並返回false

inOrderDfs(node, value) {
    if (!node) {
      return;
    }
    
    if (node.left) return this.inOrderDfs(node.left, value);
    //             ^^^^^^
    if (node.value === value) return true;
    
    if (node.right) return this.inOrderDfs(node.right, value);
    //              ^^^^^^
    return false;
  }

您需要檢查該值,然后返回:

inOrderDfs(node, value) {
    if (!node) {
       return;
    }
    
    if (node.left) return this.inOrderDfs(node.left, value);
   
    // Add this
    if (node.value === value) return true;
   
    if (node.right) return this.inOrderDfs(node.right, value);
}

但是,如果它是 BST,那么您可以執行以下操作:

inOrderDfs(node, value) {
    if (!node) {
       return;
    }
    // Add this check first
    if (node.value === value) return true;

    if (node.left && val < node.val) {
        return this.inOrderDfs(node.left, value);
    }
    else return this.inOrderDfs(node.right, value);
}

暫無
暫無

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

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