题解 | #第k轻的牛牛#

第k轻的牛牛

https://www.nowcoder.com/practice/d3b31f055b1640d9b10de0a6f2b8e6f3

package main

import . "nc_tools"

/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 *
 *
 * @param root TreeNode类
 * @param k int整型
 * @return int整型
 */
func kthLighest(root *TreeNode, k int) int {
	// write code here
	v := 0
	dfs(root, &k, &v)
	return v
}

func dfs(root *TreeNode, k *int, v *int) {

    if *k == -1 {
        return
    }

	if root.Left != nil {
		dfs(root.Left, k, v)
	}

    *k--
	if *k == 0 {
		*v = root.Val
		return
	}

	if root.Right != nil {
		dfs(root.Right, k, v)
	}
}

解题思路

  • 二叉树搜索树的特点是,每个根节点,左节点值小于根节点的值,右节点大于跟节点的值。由于这样的特点,如果通过中序遍历,就是从小到大的排序列表。
  • 只要通过中序遍历的方式,每遍历一个元素k--,当k为0时,就找到了第k个元素。这个时候就可以递归结束了,所以k=-1时,直接返回。
  • 注意:k和v在递归函数里,用的是地址类型。
全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务