剑指Offer(Java版)第六十五题:给定一棵二叉搜索树,请找出其中的第k小的结点。 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
Posted 桌子哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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
}
}
以上是关于剑指Offer(Java版)第六十五题:给定一棵二叉搜索树,请找出其中的第k小的结点。 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。的主要内容,如果未能解决你的问题,请参考以下文章
剑指Offer(Java版)第四十五题:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
剑指Offer(Java版)第六十七题:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口