• delete-node-in-a-bst


    https://leetcode.com/problems/delete-node-in-a-bst/

    /**
     * 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* deleteNode(TreeNode* root, int key) {
            if (root == NULL) {
                return NULL;
            }
    
            TreeNode* cur = root;
            TreeNode* last = NULL;
            while (cur != NULL && cur->val != key) {
                if (cur->val > key) {
                    last = cur;
                    cur = cur->left;
                }
                else {
                    last = cur;
                    cur = cur->right;
                }
            }
    
            if (cur == NULL) {
                return root;
            }
    
            TreeNode* tlast = cur;
            TreeNode* tcur;
            if (cur->left != NULL) {
                tcur = cur->left;
                while (tcur->right != NULL) {
                    tlast = tcur;
                    tcur = tcur->right;
                }
    
                if (tcur == tlast->left) {
                    tlast->left = tcur->left;
                }
                else {
                    tlast->right = tcur->left;
                }
                cur->val = tcur->val;
            }
            else if (cur->right != NULL) {
                tcur = cur->right;
                while (tcur->left != NULL) {
                    tlast = tcur;
                    tcur = tcur->left;
                }
                if (tcur == tlast->left) {
                    tlast->left = tcur->right;
                }
                else {
                    tlast->right = tcur->right;
                }
                cur->val = tcur->val;
            }
            else {
                if (last == NULL) {
                    // only root
                    return NULL;
                }
                if (cur == last->left) {
                    last->left = NULL;
                }
                else if (cur == last->right){
                    last->right = NULL;
                }
                else {
                    // error
                }
            }
            return root;
        }
    };
  • 相关阅读:
    ElasticSearch安装中遇到的一些问题
    微信扫描二维码下载问题
    nginx截获客户端请求
    Nginx中的一些匹配顺序
    Redis-cli命令最新总结
    RabbitMQ服务安装配置
    Nginx服务状态监控
    使用Sqlserver更新锁防止数据脏读
    PHPStorm IDE 快捷键(MAC)
    MongoDB 安装
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6021210.html
Copyright © 2020-2023  润新知