LeetCode75| 二叉搜索树
2023-12-30 17:53:19
    		目录
700 二叉搜索树中的搜索
注意二叉搜索树的性质即可?
迭代?
class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        while(root != NULL){
            if(root->val < val)root = root->right;
            else if(root->val > val)root = root->left;
            else return root;
        }
        return NULL;
    }
};时间复杂度O(n)
空间复杂度O(n)
递归
class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        if(root == NULL)return NULL;
        if(root->val == val)return root;
        return root->val > val?searchBST(root->left,val) : searchBST(root->right,val); 
    }
};时间复杂度O(n)
空间复杂度O(1)
450 删除二叉搜索树中的节点
在删除待删除节点时有如下五种情况
- 没找到待删除节点,遍历到空节点后返回
- 待删除节点左右节点都为空,删除后直接返回空
- 待删除节点左节点为空,右节点不为空,删除节点后让右孩子作为根节点
- 待删除节点右节点为空,左节点不为空,删除节点后让左孩子作为根节点
- 待删除节点左右节点都不为空,将待删除节点的左孩子放到右孩子的最左节点的左孩子处,返回待删除节点的右孩子作为根节点
class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
        if(root == NULL)return NULL;//情况一
        if(root->val == key){
            if(root->left == NULL && root->right == NULL)return NULL;//情况二
            else if(root->left == NULL && root->right != NULL)return root->right;//情况三
            else if(root->left != NULL && root->right == NULL)return root->left;//情况四
            else{//情况五
                TreeNode* cur = root->right;
                while(cur->left != NULL){
                    cur = cur->left;
                }
                cur->left = root->left;
                return root->right;
            }
        }
        if(root->val > key)root->left = deleteNode(root->left,key);
        if(root->val < key)root->right = deleteNode(root->right,key);
        return root;
    }
};时间复杂度O(n)
空间复杂度O(n)
    			文章来源:https://blog.csdn.net/m0_72832574/article/details/135218871
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!