代码随想录打卡—day22—【二叉树】— 8.22(day22最后一题+day23的先放一下等十月有空再做)

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

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

利用二叉线索树的性质2——因为是有序树,所有如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q && 中节点 < p。并且根据分析知:当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[p, q]区间中,那么cur就是 p和q的最近公共祖先。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

class Solution {
public:
    TreeNode* search(TreeNode* root, TreeNode* p, TreeNode* q)
    {
        if(root == NULL)return NULL;

        if(root->val > p->val && root->val > q->val)return search(root->left,p,q);
        else if(root->val < p->val && root->val < q->val)return search(root->right,p,q);
        else return root;

        return NULL;
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        return search(root, p, q);
    }
};

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

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

我直接写了迭代版本,注意这里需要两个指针一个表示当前节点,一个表示前一个节点比较好写。AC代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        // 思路:val大于当前节点就往右走 直到遇到空就加到right 
        // 小于当前节点就往左走 直到遇到空
        TreeNode* head = root;
        TreeNode* old = head;
        while(head)  // 没到叶子
        {
            old = head;
            if(val > head->val)head = head->right;
            else if(val < head->val)head = head->left;
        }
        TreeNode* tmp = new TreeNode(val);

        if(root == NULL)return tmp;
        if(val > old->val)old->right = tmp;
        else if(val < old->val)old->left = tmp;
        return root;
    }
};

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

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

以后有空 todo

你可能感兴趣的:(SXL,算法)