230. 二叉搜索树中第K小的元素
题目描述:
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
考察重点:中序遍历,借助go多线程实现达到条件后快速结束递归 。
func findK(root *TreeNode, k int, m *int, wait *sync.WaitGroup) { //中序遍历if root == nil {return}findK(root.Left, k, m, wait)*m = *m + 1 //m记录整体的序数if *m == k { //当m==k,停止这个goroutine,m中存入相应的Val值*m = root.Valwait.Done() //wait.Done()减一后,主函数向下执行到return需要一段时间time.Sleep(3 * time.Second) //所以这里停止3s,给主函数向下执行的时间}findK(root.Right, k, m, wait)}
func KthSmallest(root *TreeNode, k int) int {var m int = 0wait := sync.WaitGroup{}wait.Add(1)go findK(root, k, &m, &wait)wait.Wait() //找到m后,主程序继续运行返回mreturn m
}