剑指 Offer 54. 二叉搜索树的第k大节点

给定一棵二叉搜索树,请找出其中第k大的节点。
image.png

  1. //go 迭代;时空都是:平衡时:O(logN+K); 不平衡时:O(N+K)
  2. func kthLargest(root *TreeNode, k int) int {
  3. queue := []*TreeNode{}
  4. for root != nil || len(queue) > 0 {
  5. n := len(queue)
  6. if root != nil {
  7. queue = append(queue, root)
  8. root = root.Right
  9. } else {
  10. node := queue[n-1]
  11. queue = queue[:n-1]
  12. k--
  13. if k == 0 {
  14. return node.Val
  15. }
  16. root = node.Left
  17. }
  18. }
  19. return 0
  20. }