剑指Offer(Java版)第六十五题:给定一棵二叉搜索树,请找出其中的第k小的结点。 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

/*
给定一棵二叉搜索树,请找出其中的第k小的结点。
例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
*/
/*
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
*/
//思路:从最左边的叶子节点开始找起。

import java.util.*;

public class Class65 {

public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;
}
}

TreeNode KthNode(TreeNode pRoot, int k){
if(pRoot == null || k <= 0){
return null;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
int count = 0;
TreeNode node = pRoot;
do{
if(node != null){
stack.push(node);
node = node.left;
}else{ //已经到达最左的叶子节点
node = stack.pop();
count++;
if(count == k){
return node;
}
node = node.right;
}
}while(node != null || !stack.isEmpty());
return null;
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

猜你喜欢

转载自www.cnblogs.com/zhuozige/p/12552911.html