day22 代码回想录 二叉搜索树的最近公共祖先&二叉搜索树中的插入操作&删除二叉搜索树中的节点

大纲

● 235. 二叉搜索树的最近公共祖先
● 701.二叉搜索树中的插入操作
● 450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先

// 二叉搜索树的公共祖先
// 思路:遇到第一个在[p,q]之间的数,就是公共祖先

// 递归参数返回值
// 递归结束条件:
// 单层循环
TreeNode* binaryTreeParent(TreeNode* root, TreeNode* p, TreeNode* q)
{
    if (!root) return nullptr;

    if (root->val > p->val && root->val < q->val)
        return root;

    TreeNode* pRet = binaryTreeParent(root->left, p, q);
    TreeNode* qRet = binaryTreeParent(root->right, p, q);

    return pRet ? pRet : qRet;

}

TreeNode* bSameParent(TreeNode* root, TreeNode* p, TreeNode* q)
{
    return binaryTreeParent(root, p, q);
}

701.二叉搜索树中的插入操作

// 二叉搜索树的插入
// 思路:如果节点小插入到左边子树,比右边大,插入到右边子树
// 寻找到插入位置,叶子节点就行,题目要求不需要调整位置
// 返回值:新建立的节点
// 结束条件: root 为空 就是插入位置
// 循环:左右子树 值
// 优化:删除node临时变量
TreeNode* insertNodeInTree(TreeNode* root, int val)
{
    if (!root) {
        TreeNode* node = new TreeNode(val);
        return node;
    }
    if (root->val < val) {
        root->right = insertNodeInTree(root->right, val);
    }
    else if(root->val > val) {
        root->left = insertNodeInTree(root->left, val);
    }
    return root;
}

你可能感兴趣的:(算法,数据结构,c++,leetcode,二叉树)