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

发布时间 2023-09-09 15:42:22作者: 小星code

题目链接: 剑指 Offer 54. 二叉搜索树的第k大节点

题目描述:

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

解法思路:

  • 由于题目中二叉树是二叉搜索树(中序遍历是升序的),要求的是第 k 大的节点值,也就是倒数第 k 个数,
  • 因此可以转换一下遍历顺序,按照 右->根->左的顺序进行遍历的话,得到的顺序就是降序的,
  • 遍历 k 次即可

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func kthLargest(root *TreeNode, k int) int {
    var res int
    var dfs func(*TreeNode)
    dfs = func(root *TreeNode){
        if root == nil {
            return 
        }
        dfs(root.Right)
        k--
        if k == 0 {
           res = root.Val
        }
        dfs(root.Left)
    }
    dfs(root)
    return res
}