题目:给定一棵二叉搜索树,请找出其中第k大的节点。例如,在下图中的二叉搜索树里,按照节点数值大小顺序,第三大节点的值是4。
思路:
注意到这是一个二叉搜索树,二叉搜索树的中序遍历就是一个递增的序列,所以这道题就只用中序遍历数组一下,然后找出第k大的值就好了。思路不难,但是代码要多写几遍。
代码:
struct BinaryTreeNode
{
int m_nValeue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
BinaryTreeNode* KthNode(BinaryTreeNode* pRoot, unsigned int k)
{
if (pRoot == nullptr || k == 0)
return nullptr;
}
BinaryTreeNode*KthNodeCore(BinaryTreeNode*pRoot, unsigned int&k)
{
BinaryTreeNode* target = nullptr;
if (pRoot->m_pLeft != nullptr)
target = KthNodeCore(pRoot->m_pLeft, k);
if (target == nullptr)
{
if (k == 1)
target = pRoot;
k--;
}
if (target == nullptr&&pRoot->m_pRight != nullptr)
target = KthNodeCore(pRoot->m_pRight, k);
return target;
}