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

235. 二叉搜索树的最近公共祖先235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)

学习过236题之后,发现很多算法基础,搜索二叉树的性质,通过判断根节点大小来进行左右子树的区别,但是想不到若不能往左右子树往下面进行搜索,那么此根节点就是祖先。对于二叉树的一个个递归的返回属实有点捉摸不透。

class Solution {
public:
    TreeNode* traversal(TreeNode* root, TreeNode* p, TreeNode* q)
    {
        if (root == NULL)return NULL;
        if (root->val > p->val && root->val > q->val)
        {
            TreeNode*left= traversal(root->left, p, q);
            if (left)return left;
        }
        if (root->val < p->val && root->val < q->val)
        {
            TreeNode* right = traversal(root->right, p, q);
            if (right)return right;
        }
        return root;//加了这一句就瞬间清楚了,感觉最近刷太多二叉树的题目了,有点混淆了
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 
    {
        return traversal(root, p, q);
    } 
};

701.二叉搜索树中的插入操作701. 二叉搜索树中的插入操作 - 力扣(LeetCode)

本来自己想了一种方法,放到了代码里面的备注中,但是发现只是局部变量,并不是全局变量的改变。

class Solution {
private:
    TreeNode* parent;
    void traversal(TreeNode* root, int val)
    {
        if (root == NULL)//若一开始root等于0
        {
            TreeNode* node = new TreeNode(val);//很奇怪不知道为什么不能直接将此结点更新为TreeNode(val)值
            if (val > parent->val) parent->right = node;//就是为什么一定要用父结点来指定他,而不能让当前值直接等于他
            else parent->left = node;
            return;
        }
        parent = root;//记录父节点
        if (root->val > val)//当前根节点值比右边大
        {
            traversal(root->left, val);
        }
        if (root->val < val)
        {
            traversal(root->right, val);
        }
    }
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) 
    {
        parent = new TreeNode(0);
        if (root == NULL)
        {
            root = new TreeNode(val);
        }
        traversal(root, val);
        return root;
    }
};

450.删除二叉搜索树中的节点 

这题有点难度,还在理解中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值