做营销网站设计,wordpress升级设置密码,丽水专业网站建设哪家好,做简单网站需要学什么软件230. 二叉搜索树中第K小的元素
题目描述#xff1a; 给定一个二叉搜索树的根节点 root #xff0c;和一个整数 k #xff0c;请你设计一个算法查找其中第 k 个最小元素#xff08;从 1 开始计数#xff09;。
考察重点#xff1a;中序遍历#xff0c;借助go多线程实现…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 { //当mk停止这个goroutinem中存入相应的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
}