二叉搜索树求最近公共祖先

题目理解

二叉搜索树是有序的,如果是左中右排的话,只要在有序数组中查找两数之间的根节点就可以了。不需要遍历整棵树,找到就可以。

代码块

class Solution {
public:
    TreeNode* traversal(TreeNode* curr, TreeNode* p, TreeNode* q) {
        if (curr == NULL)
            return curr;
        if (curr->val > p->val && curr->val > q->val) {
            TreeNode* left = traversal(curr->left, p, q);
            if (left != NULL)
                return left;}
            if (curr->val < p->val && curr->val < q->val) {
                TreeNode* right = traversal(curr->right, p, q);
                if (right != NULL)
                    return right;
            }return curr;  
        }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == NULL)
            return root;
        return traversal(root, p, q);
    }
};

二叉搜索树中的插入操作

题目理解

在已知的一个二叉搜索树中插入一个节点,使插入操作之后该树依然是二叉搜索树。

思路

代码

class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if (root == NULL) {
            TreeNode* node = new TreeNode(val);
            return node;
        }
        if (root->val > val)
            root->left = insertIntoBST(root->left, val);
        if (root->val < val)
            root->right = insertIntoBST(root->right, val);
        return root;
    }
};

二叉搜索树中的删除操作

代码

class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
      if(root==NULL)  return root;
      if(root->val==key){
        if(root->left==NULL&&root->right==NULL) return NULL;
        if(root->left!=NULL&&root->right==NULL) return root->left;
        if(root->left==NULL&&root->right!=NULL) return root->right;
        else{
        TreeNode* curr=root->right;
        while(curr->left!=NULL)  {curr=curr->left;}
        curr->left = root->left;
        TreeNode*tmp=root;
        root =root->right;
        tmp->left=curr->left;
        delete tmp;
        return root;
        }
      }
      if(root->val>key) root->left=deleteNode(root->left,key);
      if(root->val<key) root->right=deleteNode(root->right,key);
      return root;
    }
};
posted on 2025-11-24 19:21  FAfa_C++  阅读(0)  评论(0)    收藏  举报