题目描述:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
本题知识点:
栈 树
解题思路:
二叉搜索树的中序遍历结果为对结点值从小到大排序,中序遍历二叉树的第k个结点即为结果。
代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(!pRoot || k == 0)
return NULL;
stack<TreeNode*> stack1;
TreeNode* Node = pRoot;
int num = 0;
while(Node || !stack1.empty())
{
if(Node)
{
stack1.push(Node);
Node = Node->left;
}
else
{
Node = stack1.top();
num++;
if(num == k)
return Node;
stack1.pop();
Node = Node->right;
}
}
return NULL;
}
};