【问题标题】:BST tree search easy leetcodeBST 树搜索简单 leetcode
【发布时间】:2020-01-24 13:51:32
【问题描述】:

给定二叉搜索树 (BST) 的根节点和一个值。您需要在 BST 中找到该节点的值等于给定值的节点。返回以该节点为根的子树。如果这样的节点不存在,你应该返回NULL。

这是我的代码得到的:

 class Solution:
     def searchBST(self, root: TreeNode, val: int) -> TreeNode:
         if root == None:
             return None
         elif root.val == val:
             return root
         elif root.val>val:
             root = self.searchBST(root.left,val)
         else:
             root = self.searchBST(root.right,val)

似乎输出无。 但是如果换行

 root = self.searchBST(root.left,val)

 return self.searchBST(root.left,val)

与 root.right 相同

然后就可以了。 我不太擅长递归,但我们该怎么做

 return self.searchBST(root.left,val)

searchBST(..) 不返回 TreeNode,所以我们不必将 treenode 放在变量 root 中吗?

【问题讨论】:

    标签: python binary-tree binary-search-tree


    【解决方案1】:
    class Solution(object):
    def is_leaf(self,root):
            return root.left is None and root.right is None
    
    def searchBST(self, root, val):
    
        if root is None:
            return root
        if self.is_leaf(root):
            if root.val == val:
                return root
            return None
    
        if root.val == val:
            return root
        elif val < root.val:
            return self.searchBST(root.left,val)
            
        else:
            return self.searchBST(root.right,val)
    

    【讨论】:

      【解决方案2】:

      你必须明确告诉 Python 你希望函数返回什么。这就是您对return Nonereturn root 行所做的。

      leftright 情况下,您只是更改参数root 的本地值,而不更改函数范围之外的任何内容。 没有明确的returnreturn None 相同。

      将两个root = 替换为return 确实应该可以完成工作。

      【讨论】:

        【解决方案3】:

        没有问题,您需要返回与 val 匹配的节点。

        为了做到这一点,如果找到值,则必须返回节点的地址,如果没有,则返回 None。

        为了将值反向传播根地址或 Null(如果未找到),因此您必须在每一步返回一些地址。

        如果您遇到递归问题,请使用迭代遍历。

        root iterativeSearch(struct Node* root, int key) 
        { 
            // Traverse untill root reaches to dead end 
            while (root != NULL) { 
                // pass right subtree as new tree 
                if (key > root->data) 
                    root = root->right; 
        
                // pass left subtree as new tree 
                else if (key < root->data) 
                    root = root->left; 
                else
                    return root; // if the key is found return 1 
            } 
            return  Null; 
        } 
        

        转到此进行递归可视化:https://www.cs.usfca.edu/~galles/visualization/BST.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-24
          • 2019-04-09
          • 2021-06-18
          • 1970-01-01
          • 1970-01-01
          • 2012-05-13
          • 1970-01-01
          • 2013-01-08
          相关资源
          最近更新 更多