【算法】JZ54 二叉搜索树的第k个节点
给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。
题解
中序遍历结果是升序的。 把问题转化成,在搜索二叉树中,中序找第k个结点。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
// 法一:递归
// 法二:非递归 --- 栈
class Solution {
public:
// 中序遍历,升序系列的第k个数字
int KthNode(TreeNode* proot, int k) {
if(nullptr == proot || k <= 0)
return -1;
stack<TreeNode*> st;
TreeNode* node = proot;
do {
// 压入左节点
while(nullptr != node)
{
st.push(node);
node = node->left;
}
// 根
if(!st.empty())
{
node = st.top();
st.pop();
k--;
if(k == 0)
{
return node->val;
}
// 右
node = node->right;
}
}while(nullptr != node || !st.empty());
return -1;
}
};
循环终止条件确定
while(nullptr != node || !st.empty());
1、
(nullptr == node
2、
st.empty()
