题目描述
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
解题思路:由于是二叉搜索树(二叉查找树),故中序遍历该树,得到的是有序的。所以在遍历的过程中返回第K个节点就可以了。
采用非递归中序遍历:
import java.util.Stack;
public class Solution {
TreeNode KthNode(TreeNode pRoot, int k) {
if(k==0||pRoot==null) return null;
else
{
int count=0;
Stack<TreeNode> s=new Stack<TreeNode>();
TreeNode node=pRoot;
while(!s.empty()||node!=null)
{
if(node!=null)
{
s.push(node);
node=node.left; //遍历左子树;
}
else
{
node=s.pop();
count++;
if(count==k) return node;
node=node.right; //遍历右子树
}
}
return null;
}
}
}
版权声明:本文为luochangkaiaimolv原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。