Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python BST树搜索简易leetcode_Python_Binary Tree_Binary Search Tree - Fatal编程技术网

Python BST树搜索简易leetcode

Python BST树搜索简易leetcode,python,binary-tree,binary-search-tree,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 == va

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

跟root一样,对吗

然后它就起作用了。 我不太擅长递归,但我们该怎么做呢

 return self.searchBST(root.left,val)

searchBST(…)不返回树节点吗?因此我们不必将树节点放在变量根中吗?

不,如前所述,您需要返回与val匹配的节点

为了做到这一点,如果找到值,必须返回节点的地址,如果找不到,则返回无

为了反向传播根地址或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; 
} 
root迭代搜索(结构节点*root,int键)
{ 
//穿过,直到根部到达死端
while(root!=NULL){
//将右子树作为新树传递
如果(键>根->数据)
根=根->右;
//将左子树作为新树传递
else if(键data)
根=根->左;
其他的
return root;//如果找到键,则返回1
} 
返回Null;
} 

转到此处进行递归可视化:

否如问题中所述,您需要返回与val匹配的节点

为了做到这一点,如果找到值,必须返回节点的地址,如果找不到,则返回无

为了反向传播根地址或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; 
} 
root迭代搜索(结构节点*root,int键)
{ 
//穿过,直到根部到达死端
while(root!=NULL){
//将右子树作为新树传递
如果(键>根->数据)
根=根->右;
//将左子树作为新树传递
else if(键data)
根=根->左;
其他的
return root;//如果找到键,则返回1
} 
返回Null;
} 

转到这里进行递归可视化:

您必须明确地告诉Python您希望函数返回什么。这就是使用
returnnone
returnroot
行所做的

左侧
右侧
情况下,您只更改参数
的局部值,而不更改函数范围之外的任何内容。 无显式
返回
无返回
相同


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

您必须明确地告诉Python您希望函数返回什么。这就是使用
returnnone
returnroot
行所做的

左侧
右侧
情况下,您只更改参数
的局部值,而不更改函数范围之外的任何内容。 无显式
返回
无返回
相同

将两个
root=
替换为
return
确实可以完成这项工作