mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 08:50:15 +08:00
Merge pull request #1418 from wzqwtt/tree16
添加(0701.二叉搜索树中的插入操作、0450.删除二叉搜索树中的节点) Scala版本
This commit is contained in:
@ -582,7 +582,35 @@ function deleteNode(root: TreeNode | null, key: number): TreeNode | null {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Scala
|
||||||
|
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
def deleteNode(root: TreeNode, key: Int): TreeNode = {
|
||||||
|
if (root == null) return root // 第一种情况,没找到删除的节点,遍历到空节点直接返回
|
||||||
|
if (root.value == key) {
|
||||||
|
// 第二种情况: 左右孩子都为空,直接删除节点,返回null
|
||||||
|
if (root.left == null && root.right == null) return null
|
||||||
|
// 第三种情况: 左孩子为空,右孩子不为空,右孩子补位
|
||||||
|
else if (root.left == null && root.right != null) return root.right
|
||||||
|
// 第四种情况: 左孩子不为空,右孩子为空,左孩子补位
|
||||||
|
else if (root.left != null && root.right == null) return root.left
|
||||||
|
// 第五种情况: 左右孩子都不为空,将删除节点的左子树头节点(左孩子)放到
|
||||||
|
// 右子树的最左边节点的左孩子上,返回删除节点的右孩子
|
||||||
|
else {
|
||||||
|
var tmp = root.right
|
||||||
|
while (tmp.left != null) tmp = tmp.left
|
||||||
|
tmp.left = root.left
|
||||||
|
return root.right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (root.value > key) root.left = deleteNode(root.left, key)
|
||||||
|
if (root.value < key) root.right = deleteNode(root.right, key)
|
||||||
|
|
||||||
|
root // 返回根节点,return关键字可以省略
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
@ -585,6 +585,43 @@ function insertIntoBST(root: TreeNode | null, val: number): TreeNode | null {
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Scala
|
||||||
|
|
||||||
|
递归:
|
||||||
|
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
def insertIntoBST(root: TreeNode, `val`: Int): TreeNode = {
|
||||||
|
if (root == null) return new TreeNode(`val`)
|
||||||
|
if (`val` < root.value) root.left = insertIntoBST(root.left, `val`)
|
||||||
|
else root.right = insertIntoBST(root.right, `val`)
|
||||||
|
root // 返回根节点
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
迭代:
|
||||||
|
|
||||||
|
```scala
|
||||||
|
object Solution {
|
||||||
|
def insertIntoBST(root: TreeNode, `val`: Int): TreeNode = {
|
||||||
|
if (root == null) {
|
||||||
|
return new TreeNode(`val`)
|
||||||
|
}
|
||||||
|
var parent = root // 记录当前节点的父节点
|
||||||
|
var curNode = root
|
||||||
|
while (curNode != null) {
|
||||||
|
parent = curNode
|
||||||
|
if(`val` < curNode.value) curNode = curNode.left
|
||||||
|
else curNode = curNode.right
|
||||||
|
}
|
||||||
|
if(`val` < parent.value) parent.left = new TreeNode(`val`)
|
||||||
|
else parent.right = new TreeNode(`val`)
|
||||||
|
root // 最终返回根节点
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>
|
||||||
|
Reference in New Issue
Block a user