二叉搜索树的第k个节点

时间:2019-08-28
本文章向大家介绍二叉搜索树的第k个节点,主要包括二叉搜索树的第k个节点使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
复制代码
// 面试题54:二叉搜索树的第k个结点
// 题目:给定一棵二叉搜索树,请找出其中的第k大的结点。

#include <iostream>
#include "BinaryTree.h"

const BinaryTreeNode* KthNodeCore(const BinaryTreeNode* pRoot, unsigned int& k);

const BinaryTreeNode* KthNode(const BinaryTreeNode* pRoot, unsigned int k)
{
    if (pRoot == nullptr || k == 0)//判断边界
        return nullptr;

    return KthNodeCore(pRoot, k);
}

const BinaryTreeNode* KthNodeCore(const BinaryTreeNode* pRoot, unsigned int& k)//k必须引用传递啊,不然记不住
{
    const BinaryTreeNode* target = nullptr;

    if (pRoot->m_pLeft != nullptr)//迭代找出最小点
        target = KthNodeCore(pRoot->m_pLeft, k);

    if (target == nullptr)//找到最小节点了,并k--,如果k==1,就算是找到了,记下target
    {
        if (k == 1)
            target = pRoot;

        k--;
    }

    if (target == nullptr && pRoot->m_pRight != nullptr)//一旦找到target,就不会继续迭代了,全部返回
        target = KthNodeCore(pRoot->m_pRight, k);

    return target;
}

原文地址:https://www.cnblogs.com/cgy1012/p/11425106.html