450. Delete Node in a BST
2016-12-27 19:06
381 查看
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:
Note: Time complexity should be O(height of tree).
Example:
解答如下:
1. 如果待删除节点最多只有一个孩子,孩子节点替换待删除节点,删除节点。
2. 如果待删除节点有两个孩子节点,找到右子树中最小的节点(后继节点),待删除节点的值替换为后继节点值,继续在右子树中删除后继节点。
LeetCode AC代码如下:
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).
Example:
root = [5,3,6,2,4,null,7] key = 3 5 / \ 3 6 / \ \ 2 4 7 Given key to delete is 3. So we find the node with value 3 and delete it. One valid answer is [5,4,6,2,null,null,7], shown in the following BST. 5 / \ 4 6 / \ 2 7 Another valid answer is [5,2,6,null,4,null,7]. 5 / \ 2 6 \ \ 4 7
解答如下:
1. 如果待删除节点最多只有一个孩子,孩子节点替换待删除节点,删除节点。
2. 如果待删除节点有两个孩子节点,找到右子树中最小的节点(后继节点),待删除节点的值替换为后继节点值,继续在右子树中删除后继节点。
LeetCode AC代码如下:
/** * 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) { TreeNode *temp; if (root != NULL) { if (key < root->val) root->left = deleteNode(root->left, key); else if (key > root->val) root->right = deleteNode(root->right, key); else if (root->left != NULL && root->right != NULL) { temp = minNode(root->right); if (temp != NULL) { root->val = temp->val; root->right = deleteNode(root->right, root->val); } } else { temp = root; if (root->left == NULL) root = root->right; else if (root->right == NULL) root = root->left; delete temp; } } return root; } TreeNode *minNode(TreeNode *root) { TreeNode *pNode = root; while (pNode != NULL && pNode->left != NULL) { pNode = pNode->left; } return pNode; } };
相关文章推荐
- 450. Delete Node in a BST
- [hard]450. Delete Node in a BST
- LeetCode 450. Delete Node in a BST
- [leetcode]450. Delete Node in a BST
- 【二叉搜索树:删除指定结点】leetcode 450. Delete Node in a BST
- 450. Delete Node in a BST
- Leetcode-450. Delete Node in a BST
- [leetCode刷题笔记]450. Delete Node in a BST
- 450. Delete Node in a BST
- 450. Delete Node in a BST
- 【LeetCode】 450. Delete Node in a BST
- Leetcode 450. Delete Node in a BST (Medium) (cpp)
- leetcode 450. Delete Node in a BST
- LeetCode "450. Delete Node in a BST"
- 450. Delete Node in a BST**
- 450. Delete Node in a BST
- leetcode 450. Delete Node in a BST
- LeetCode 450. Delete Node in a BST
- 450. Delete Node in BST
- 450. Delete Node in a BST