Golang | Leetcode Golang题解之第230题二叉搜索树中第K小的元素

题目:

题解:

type MyBst struct {
    root    *TreeNode
    nodeNum map[*TreeNode]int // 统计以每个结点为根结点的子树的结点数,并存储在哈希表中
}

// 统计以 node 为根结点的子树的结点数
func (t *MyBst) countNodeNum(node *TreeNode) int {
    if node == nil {
        return 0
    }
    t.nodeNum[node] = 1 + t.countNodeNum(node.Left) + t.countNodeNum(node.Right)
    return t.nodeNum[node]
}

// 返回二叉搜索树中第 k 小的元素
func (t *MyBst) kthSmallest(k int) int {
    node := t.root
    for {
        leftNodeNum := t.nodeNum[node.Left]
        if leftNodeNum < k-1 {
            node = node.Right
            k -= leftNodeNum + 1
        } else if leftNodeNum == k-1 {
            return node.Val
        } else {
            node = node.Left
        }
    }
}

func kthSmallest(root *TreeNode, k int) int {
    t := &MyBst{root, map[*TreeNode]int{}}
    t.countNodeNum(root)
    return t.kthSmallest(k)
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 12:50:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 12:50:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 12:50:02       57 阅读
  4. Python语言-面向对象

    2024-07-15 12:50:02       68 阅读

热门阅读

  1. ArcGIS Pro SDK (八)地理数据库 8 拓扑

    2024-07-15 12:50:02       20 阅读
  2. ArcGIS Pro SDK (九)几何 3 点

    2024-07-15 12:50:02       20 阅读
  3. 服务器主板开发阶段以及测试重点

    2024-07-15 12:50:02       24 阅读
  4. Linux:解决vim打开文件默认为replace模式

    2024-07-15 12:50:02       20 阅读
  5. mysql中的if语句:case when

    2024-07-15 12:50:02       24 阅读
  6. Linux使用systemctl添加自启动程序实现步骤

    2024-07-15 12:50:02       22 阅读
  7. dockerfile配置和yml配置

    2024-07-15 12:50:02       20 阅读
  8. Github 2024-07-14 php开源项目日报 Top10

    2024-07-15 12:50:02       26 阅读
  9. QT5_C++基础

    2024-07-15 12:50:02       27 阅读
  10. 【《流畅的python》3.2-3.3节学习笔记】

    2024-07-15 12:50:02       25 阅读
  11. 科普文:Redis一问一答

    2024-07-15 12:50:02       17 阅读
  12. 加密方式种类有哪些

    2024-07-15 12:50:02       23 阅读
  13. redis高级

    2024-07-15 12:50:02       19 阅读
  14. Kotlin中let、apply、also、with、run的使用与区别

    2024-07-15 12:50:02       23 阅读