LeetCode 450 Delete Node in a BST(删除BST节点)
2017-05-24 16:12
459 查看
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).
Example:
题目大意:删除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).
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
题目大意:删除BST上的节点。
代码如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ struct TreeNode* findMax(struct TreeNode* root) { if(root == NULL) return NULL; else if(root->right == NULL) return root; else return findMax(root->right); } struct TreeNode* deleteNode(struct TreeNode* root, int key) { if(root == NULL) return NULL; if(root->val < key){ root->right = deleteNode(root->right, key); }else if(root->val > key){ root->left = deleteNode(root->left, key); }else if(root->left && root->right){ struct TreeNode* tmp = findMax(root->left); root->val = tmp->val; root->left = deleteNode(root->left, tmp->val); }else{ struct TreeNode* tmp = root; if(root->left == NULL) root = root->right; else if(root->right == NULL) root = root->left; free(tmp); } return root; }
相关文章推荐
- [LeetCode] Delete Node in a BST 删除二叉搜索树中的节点
- [LeetCode]79. Delete Node in a Linked List删除链表节点
- LeetCode 237. Delete Node in a Linked List(删除链表中的一个节点)
- [LeetCode] 237. Delete Node in a Linked List 删除链表的节点
- [LeetCode] Delete Node in a Linked List 删除链表的节点
- 【LeetCode450】Delete Node in BST二叉搜索树删除节点
- LeetCode237_Delete Node in a Linked List(删除链表中的节点) Java题解
- LeetCode 237. Delete Node in a Linked List - 删除链表中的一个节点
- LeetCode - 450 - Delete Node in a BST
- LeetCode--Delete Node in a Linked List(删除链表中的节点)Python
- leetcode 237 --Delete Node in a Linked List 链表 删除节点
- LeetCode 237 Delete Node in a Linked List(在链表中删除节点)
- leetcode237---Delete Node in a Linked List(删除指定节点)
- 【二叉搜索树:删除指定结点】leetcode 450. Delete Node in a BST
- LeetCode.450 Delete Node in a BST(经典删除二叉树某个节点,必备题)
- LeetCode[450]Delete Node in a BST(Java)
- [LeetCode-237] Delete Node in a Linked List(删除链表中节点)
- [LintCode] Delete Node in the Middle of Singly Linked List 在单链表的中间删除节点
- 450. Delete Node in a BST
- LeetCode 450. Delete Node in a BST