概述
题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4
解法一:递归
```java
//递归
public class Solution {
int count=0;//记录遍历的结点数
TreeNode p=null;
TreeNode KthNode(TreeNode pRoot, int k){
if(pRoot==null||k<1) return null;
p=minNode(pRoot,k);
return p;
}
//找到最小结点的函数
TreeNode minNode(TreeNode pRoot, int k){
if(pRoot.left!=null) p=minNode(pRoot.left,k);
count++;
if(k==count) p= pRoot;
if(p==null&&pRoot.right!=null) p=minNode(pRoot.right,k);
return p;
}
}
解法二:中序遍历,时间比递归少
```java
//中序遍历结果就是从小到大的顺序
import java.util.*;
public class Solution {
ArrayList<TreeNode> list=new ArrayList<TreeNode>();
TreeNode KthNode(TreeNode pRoot, int k){
InSearch(pRoot);
if(list.size()>=k&&k>=1) return list.get(k-1);
return null;
}
//中序遍历
void InSearch(TreeNode pRoot){
if(pRoot!=null){
InSearch(pRoot.left);
list.add(pRoot);
InSearch(pRoot.right);
}
}
}
最后
以上就是丰富小刺猬为你收集整理的[剑指offer-JZ62]二叉搜索树的第K个结点的全部内容,希望文章能够帮你解决[剑指offer-JZ62]二叉搜索树的第K个结点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复