Java 给定一棵二叉搜索树,请找出其中的第k小的结点
import java.util.*;
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot==null||k==0)
return null;
LinkedList<Integer> queue = new LinkedList<>();
queue = midOrder(pRoot);
if(k>queue.size())
return null;
int result = 0;
while(k>0){
k--;
result = queue.poll();
}
TreeNode nodeK = new TreeNode(result);
return nodeK;
}
LinkedList<Integer> midOrder(TreeNode root){
LinkedList<Integer> queue = new LinkedList<>();
if(root==null)
return queue;
if(root.left!=null){
midOrder(root.left);
}
queue.offer(root.val);
if(root.right!=null){
midOrder(root.right);
}
return queue;
}
#Java#
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot==null||k==0)
return null;
LinkedList<Integer> queue = new LinkedList<>();
queue = midOrder(pRoot);
if(k>queue.size())
return null;
int result = 0;
while(k>0){
k--;
result = queue.poll();
}
TreeNode nodeK = new TreeNode(result);
return nodeK;
}
LinkedList<Integer> midOrder(TreeNode root){
LinkedList<Integer> queue = new LinkedList<>();
if(root==null)
return queue;
if(root.left!=null){
midOrder(root.left);
}
queue.offer(root.val);
if(root.right!=null){
midOrder(root.right);
}
return queue;
}
}
我的想法是用一个queue将二叉搜索树的中序遍历结果存起来,那queue里面存的就是从小到大的值。但是利用poll()函数知道第k个。
但是跑的结果显示,当k=1时,返回的是根节点的值。很迷惑,还望牛友指点。
不通过
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为3.57%
用例:
{8,6,10,5,7,9,11},1
对应输出应该为:
5
你的输出为:
8
答案错误:您提交的程序没有通过所有的测试用例
case通过率为3.57%
用例:
{8,6,10,5,7,9,11},1
对应输出应该为:
5
你的输出为:
8