题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。
示例1
输入
{5,3,7,2,4,6,8},3
返回值
{4}
说明
按结点数值大小顺序第三小结点的值为4
核心代码实现
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
//将输入的层次遍历转化为中序遍历
import java.util.*;
public class Solution {
LinkedList<TreeNode> list = new LinkedList<>();
TreeNode KthNode(TreeNode pRoot, int k){
addNode(pRoot);
if(k >= 1 && list.size() >= k){
return list.get(k-1);
}
return null;
}
void addNode(TreeNode node){
//中序遍历
if(node != null){
addNode(node.left);
list.add(node);
addNode(node.right);
}
}
/*非递归,利用栈完成中序遍历
if(pRoot == null || k <= 0){
return null;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode node = pRoot;
while(!stack.isEmpty() || node != null){
if(node != null){
stack.push(node); //当前节点非空,将当前节点压入栈,继续寻找当前节点的左孩子
node = node.left;
}else{
node = stack.pop(); //当前节点为空,则将当前节点出栈
if(--k == 0){
return node; //计数功能,返回对应的节点
}
node = node.right;
}
}
return null;
}
*/
}