题目概述
- 算法说明
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。 - 测试用例
输入: {5,3,7,2,4,6,8},3
返回值: {4}
说明: 按节点数值大小顺序第三小结点的值为4
解析&参考答案
- 解析
最简单的方式是使用中序遍历,然后取出第k个节点即可;此处使用变量K来记录,避免使用额外空间。 - 参考答案
vim jz62.go
package main
import "fmt"
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
var K int
func scanTree(pRoot *TreeNode) *TreeNode {
if pRoot == nil {
return pRoot
}
ret := scanTree(pRoot.Left)
if ret != nil {
return ret
}
K--
if K == 0 {
return pRoot
}
return scanTree(pRoot.Right)
}
func KthNode(pRoot *TreeNode, k int) *TreeNode {
if pRoot == nil {
return pRoot
}
K = k
return scanTree(pRoot)
}
func main() {
root := &TreeNode{5, &TreeNode{3, &TreeNode{2, nil, nil}, &TreeNode{4, nil, nil}},
&TreeNode{7, &TreeNode{6, nil, nil}, &TreeNode{8, nil, nil}}}
ret := KthNode(root, 3)
fmt.Print(ret.Val)
}
注意事项
- to add
说明
- 当前使用 go1.15.8
- 参考 牛客网--剑指offer
标题中jzn(n为具体数字)代表牛客网剑指offer系列第n号题目,例如 jz01 代表牛客网剑指offer中01号题目。
注意!!!
- 笔者最近在学习 golang,因此趁机通过数据结构和算法来进一步熟悉下go语言
- 当前算法主要来源于剑指 offer,后续会进一步补充 LeetCode 上重要算法,以及一些经典算法
- 此处答案仅为参考,不一定是最优解,欢迎感兴趣的读者在评论区提供更优解