【Offer】[54] 【二叉搜索树的第k小节点】
题目描述
给定一棵二叉搜索树,请找出其中第k小的节点。例如,在下图的二叉搜索树里,按节点数值大小顺序,第三小节点的值是4。
思路分析
二叉树的中序遍历,要注意的地方,要设置一个全局的索引index来记录遍历到第几个元素
测试用例
- 功能测试:各种形态不同的二叉搜索树。
- 边界值测试:输入k为0、1、二叉搜索树的节点数、二叉搜索树的节点数加1。
- 特殊输入测试:指向二叉搜索树根节点的指针为nullptr 指针。
Java代码
public class Offer054 {
public static void main(String[] args) {
test1();
test2();
test3();
}
public static TreeNode KthNode(TreeNode pRoot, int k) {
return Solution1(pRoot,k);
}
private static TreeNode Solution1(TreeNode pRoot, int k) {
if(pRoot==null || k==0) {
return null;
}
return KthNodeCore(pRoot,k);
}
static int index = 0;
private static TreeNode KthNodeCore(TreeNode pRoot, int k) {
TreeNode target = null;
if(pRoot.left!=null) {
target = KthNodeCore(pRoot.left, k);
}
if(target== null) {
index ++ ;
if(k==index) {
target=pRoot;
}
}
if(target==null && pRoot.right!=null) {
target = KthNodeCore(pRoot.right, k);
}
return target;
}
private static void test1() {
}
private static void test2() {
}
private static void test3() {
}
}
代码链接
************ **供自己学习查阅使用(我只想静静的写篇博客,自我总结下[手动狗头]) by Pavel** *********