/*
* 面试题54:二叉搜索树的第k个结点
* 题目:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
* 思路:二叉搜索树按照中序遍历的顺序打印出来正好就是排序好的顺序。所以,按照中序遍历顺序找到第k个结点就是结果。
*/
public class No54KthNode {
public static void main(String[] args) {
No54KthNode n = new No54KthNode();
TreeNode10 root = new TreeNode10(5);
TreeNode10 p2 = new TreeNode10(2);
TreeNode10 p3 = new TreeNode10(3);
TreeNode10 p4 = new TreeNode10(4);
TreeNode10 p7 = new TreeNode10(7);
TreeNode10 p6 = new TreeNode10(6);
TreeNode10 p8 = new TreeNode10(8);
root.left = p3;
root.right = p7;
p3.left = p2;
p3.right = p4;
p7.left = p6;
p7.right = p8;
System.out.println(n.KthNode(root, 3).val);
}
int count = 0;
TreeNode10 KthNode(TreeNode10 pRoot, int k) {
if (pRoot == null || k < 1) {
return null;
}
TreeNode10 Node = KthNode(pRoot.left, k);
if (Node != null) {
return Node;
}
count++;
if (count == k) {
return pRoot;
}
Node = KthNode(pRoot.right, k);
if (Node != null) {
return Node;
}
return null;
}
}