• 剑指offer-二叉搜索树的第k个结点


    题目描述

     
    给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / 3 7 / / 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
     

    解题思路

    二叉搜索树按照从小到大顺序输出的话正好是左子节点->根结点->右子节点这样的顺序,所以找到第k大的结点就是对二叉搜索树进行中序遍历,从第一个遍历到的节点开始计数,直到遍历到第k个结点结束。

    代码

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };
    10 */
    11 class Solution {
    12 public:
    13     int k1=0;
    14     TreeNode* KthNode(TreeNode* pRoot, int k)
    15     {
    16         if(!pRoot)
    17             return NULL;
    18         TreeNode *res=NULL;
    19         if(pRoot->left)
    20             res=KthNode(pRoot->left,k);
    21         k1++;
    22         if(k1==k)
    23             return pRoot;
    24         if(res==NULL&&pRoot->right)
    25             res=KthNode(pRoot->right,k);
    26         return res;
    27     }
    28 };
  • 相关阅读:
    5. JVM虚拟机栈
    4. 程序计数器
    3. JVM运行时数据区
    2. 类加载
    1. JVM体系结构
    SpringCloud 网关组件Gateway
    SpringCloud Hystrix断路器的基本使用
    SpringCloud Ribbon和Feign 的使用和源码分析
    反向代理的概念
    事务mysql
  • 原文地址:https://www.cnblogs.com/wmx24/p/8807024.html
Copyright © 2020-2023  润新知