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).
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
問題描述
給定二叉排序樹的根節點和一個鍵, 刪除樹中對應鍵的節點。返回二叉排序樹的根節點(可能會更新)
一般, 刪除可以分為兩部分:
- 找出刪除的節點
- 刪除節點
問題分析
找出刪除節點, 若其左子樹或右子樹為空, 那麼直接返回刪除節點的右子樹或者左子樹, 否則將刪除節點的左子樹作為刪除節點的右子樹的最左節點的左子樹, 返回刪除節點的右子樹的根節點
解法
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null) return null;
if(root.val > key){
root.left = deleteNode(root.left, key);
}else if(root.val < key){
root.right = deleteNode(root.right, key);
}else{
if(root.left == null) return root.right;
else if(root.right == null) return root.left;
else{
TreeNode leftMostNodeOfRight = toolFunc(root.right);
leftMostNodeOfRight.left = root.left;
return root.right;
}
}
return root;
}
public TreeNode toolFunc(TreeNode root){
while(root.left != null) root = root.left;
return root;
}
}
相關文章
- [LeetCode] 776. Split BSTLeetCode
- 449-Serialize and Deserialize BST
- 樹-BST基本實現
- 538-Convert BST to Greater Tree
- leetcode 450. delete-node-in-a-bst 刪除二叉搜尋樹中的節點 python3LeetCodedeletePython
- [LeetCode] 230. Kth Smallest Element in a BSTLeetCode
- LeetCode之Convert BST to Greater Tree(Kotlin)LeetCodeKotlin
- 653-Two Sum IV - Input is a BST
- 從BST到LSM的進階之路
- 二叉堆、BST 與平衡樹
- 二叉排序樹BST及CRUD操作排序
- 學習筆記——二叉平衡樹(BST)筆記
- 資料結構☞二叉搜尋樹BST資料結構
- 用PHP來實現二分搜尋樹(BST)PHP
- 二叉樹(BST)中序遍歷的三種方法二叉樹
- 【Algorithm&DataStructure】二叉查詢樹(BST)的遍歷GoASTStruct
- 使用JS去實現一個BST(二叉查詢樹)JS
- 看動畫學演算法之:二叉搜尋樹BST動畫演算法
- 『資料結構與演算法』二叉查詢樹(BST)資料結構演算法
- 前端學習資料結構1 二分排序樹(BST)前端資料結構排序
- Node利器
- 【node】Buffer
- 【node】process
- node openaiOpenAI
- node配置
- node stream
- 【node】DNSDNS
- BST查詢結構與折半查詢方法的實現與實驗比較
- [Node.js]npm安裝node-gypNode.jsNPM
- Node.js 指南(關於Node.js)Node.js
- node.js01 認識node.jsNode.js
- node.js02 安裝Node環境Node.js
- nvm--node【 node.js version management】node.js的版本管理工具Node.js
- 安裝 Node.js安裝 Node.jsNode.js
- 深入node stream
- node,走你...
- node event loopOOP
- node之npmNPM