给定一棵二叉搜索树,找出第K大节点
啊,又要中序遍历了,左中右,写个循环实现的吧
const BinaryTreeNode* KthNode(const BinaryTreeNode* pRoot, unsigned int k) //diy
{
if (pRoot == nullptr || k <= 0) return nullptr;
const BinaryTreeNode* pCurr = pRoot;
int cnt = 0;
std::stack<const BinaryTreeNode*> tempStack;
while (tempStack.size()>0 || pCurr!=nullptr)
{
while (pCurr!=nullptr)
{
tempStack.push(pCurr);
pCurr = pCurr->m_pLeft;
}
const BinaryTreeNode* pTemp = tempStack.top();
tempStack.pop();
cnt++;
if (cnt == k)
return pTemp;
if (pTemp->m_pRight != nullptr)
pCurr = pTemp->m_pRight;
}
return nullptr;
}