zoukankan      html  css  js  c++  java
  • 二叉搜索树的第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;
    }
  • 相关阅读:
    Kafka概述与部署
    理解微前端技术原理
    Docker之单机网络一
    MySQL Binlog解析
    MySQL之Xtrabackup
    MySQL之mysqldump
    学生成绩管理系统
    凯域课程表使用体验(软件名:上课了)
    动手动脑问题分析
    关于十天集训的收获
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11425106.html
Copyright © 2011-2022 走看看