码迷,mamicode.com
首页 > 其他好文 > 详细

delete-node-in-a-bst

时间:2016-11-02 00:33:43      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:tco   return   treenode   tree   style   int   erro   https   problems   

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;
    }
};

 

delete-node-in-a-bst

标签:tco   return   treenode   tree   style   int   erro   https   problems   

原文地址:http://www.cnblogs.com/charlesblc/p/6021210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!