BST树搜索简易leetcode

时间:2019-09-24 12:24:23

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

给出二叉搜索树(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)

似乎输出None。 但是如果替换行

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

使用

 return self.searchBST(root.left,val)

与root.right相同

然后它起作用。 我不太擅长递归,但是我们该怎么办

 return self.searchBST(root.left,val)

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

3 个答案:

答案 0 :(得分:0)

否,如上所述,您需要返回与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

答案 1 :(得分:0)

您必须明确告诉Python您要函数返回的内容。这就是您在return Nonereturn root行中所做的事情。

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

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

答案 2 :(得分:0)

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)