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;
    }
  • 相关阅读:
    ssh整合
    自定义Java集合
    java图形界面写个小桌面,内置简单小软件
    java简单日历
    javaSwing
    javaScript封装
    java解析xml文件
    缺省适配器
    适配器模式
    自定义SWT控件一之自定义单选下拉框
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11425106.html
Copyright © 2011-2022 走看看