Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
sl1673495 committed Jun 10, 2020
2 parents b462f6c + 34435b6 commit 477f319
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 0 deletions.
34 changes: 34 additions & 0 deletions 二叉树/二叉搜索树中第K小的元素.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthSmallest = function (root, k) {
let count = 0
let finded

let dfs = (node) => {
if (!node) {
return
}
dfs(node.left)
count++
if (count === k) {
finded = node.val
return
}
dfs(node.right)
}

dfs(root)

return finded
}
27 changes: 27 additions & 0 deletions 二叉树/二叉树的最小深度-111.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
let minDepth = function (root) {
if (!root) return 0

let depth = 0
let queue = [root]

while (queue.length) {
depth++
let len = queue.length
while (len--) {
let node = queue.shift()

let left = node.left
let right = node.right
if (!left && !right) {
return depth
}

if (left) {
queue.push(left)
}
if (right) {
queue.push(right)
}
}
}
}
52 changes: 52 additions & 0 deletions 二叉树/删除二叉搜索树中的节点-450.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
let deleteNode = function (root, key) {
let findNodePos = (node, key) => {
if (!node) {
return false
}
if (node.left && node.left.val === key) {
return {
parent: node,
pos: "left",
}
} else if (node.right && node.right.val === key) {
return {
parent: node,
pos: "right",
}
} else {
return findNodePos(node.left, key) || findNodePos(node.right, key)
}
}

let findLastLeft = (node) => {
if (!node.left) {
return node
}
return findLastLeft(node.left)
}

let virtual = new TreeNode()
virtual.left = root

let finded = findNodePos(virtual, key)
if (finded) {
let { parent, pos } = finded
let target = parent[pos]
let targetLeft = target.left
let targetRight = target.right

if (!targetLeft && !targetRight) {
parent[pos] = null
} else if (!targetRight) {
parent[pos] = targetLeft
} else if (!targetLeft) {
parent[pos] = targetRight
} else {
parent[pos] = targetRight
let lastLeft = findLastLeft(targetRight)
lastLeft.left = targetLeft
}
}

return virtual.left
}
13 changes: 13 additions & 0 deletions 二叉树/将有序数组转为二叉搜索树.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
let sortedArrayToBST = function (nums) {
let n = nums.length
if (!n) {
return null
}
let mid = Math.floor(n / 2)
let root = new TreeNode(nums[mid])

root.left = sortedArrayToBST(nums.slice(0, mid))
root.right = sortedArrayToBST(nums.slice(mid + 1, n))

return root
};

0 comments on commit 477f319

Please sign in to comment.