最强解析面试题:二叉搜索树的第k个结点

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:二叉搜索树的第k个结点相关的知识,希望对你有一定的参考价值。


最强解析面试题:二叉搜索树的第k个结点

文章讲解 “ 二叉搜索树的第k个结点 ” 经典面试题,包含思路及源码,及解惑!

题目

给定一棵结点数为 n 二叉搜索树,请找出其中的第 k 小的TreeNode结点。

注意:不是返回结点的值

示例1

输入:
{5,3,7,2,4,6,8},3
返回值:
4
说明:
按结点数值升序顺序可知第三小结点的值为4 ,故返回对应结点值为4的结点即可。

示例2

输入:
{},1
返回值:
“null”
说明:
结点数n为0,所以返回对应编程语言的空结点即可。

思路

1、中序遍历为增序,解第 k 个节点,或 第 k 大的节点,中序遍历即可
2、要判断每次遍历结果,非空返回 node。只有空才是到达叶子节点,进行计数开始

代码

package main
import.”nc_tools"

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

/**
 *
 * @param pRoot TreeNode类
 * @param k int整型
 * @return TreeNode类
 */
var num = 0
func KthNode(pRoot *TreeNode, k int) *TreeNode {
   // write code here
   if pRoot == nil || k < 1 {
      return nil
   }
   node := KthNode(pRoot.Left, k)
   if node != nil {
      return node
   }
   num++
   if num == k {
      return pRoot
   }
   node = KthNode(pRoot.Right, k)
   if node != nil {
      return node
   }
   return nil
}

附录

忙碌

以上是关于最强解析面试题:二叉搜索树的第k个结点的主要内容,如果未能解决你的问题,请参考以下文章

面试题:二叉搜索树的第K个节点

剑指Offer对答如流系列 - 二叉搜索树的第k个结点

最强解析面试题:二叉搜索树的后序遍历序列

最强解析面试题:二叉搜索树的后序遍历序列

剑指offer二叉搜索树的第k个结点

《剑指offer》:[63]二叉搜索树的第K个结点