LeetCode 450. Delete Node in a BST

来源:互联网 发布:军娘捏脸数据 编辑:程序博客网 时间:2024/06/11 21:24

450. Delete Node in a BST

Description
Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST.

Basically, the deletion can be divided into two stages:

Search for a node to remove.
If the node is found, delete the node.
Note: Time complexity should be O(height of tree).

这里写图片描述

Analysis
这道题的意思是删除BST中一个节点,我觉得难点就在于删除之后树的恢复。
我的做法就是如果当前节点是要删除的节点,如果他没有右子树,则直接返回左子树并删除当前节点。否则,将当前节点与其右子树的最左子树的节点值互换,再加后面的操作中将要删除节点删除恢复树。

Code

/** * 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;        if(root->val == key){            if(root->right == NULL){                TreeNode* left = root->left;                delete root;                return left;            }            else{                TreeNode* right = root->right;                while(right->left!=NULL) right = right->left;                int temp = root->val;                root->val = right->val;                right->val = temp;            }        }        root->left = deleteNode(root->left,key);        root->right =deleteNode(root->right,key);        return root;    }};
0 0
原创粉丝点击