题目

给定一颗二叉搜索树,请找出其中的第k小的结点,即将二叉树中所有元素从小到大排序的第 k 个结点。

解析

按中序遍历二叉搜索树就可以获得一个非递减的序列,此时第 k 个就为答案。实际上我们只需要按中序遍历访问一遍各个结点,遇到第 k 个结点时返回即可。实践复杂度为O(n) , n 为树的结点个数。

code


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct TreeNode{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x): val(x), left(NULL), right(NULL) {}
};

class Solution{
public:
    TreeNode* KthNode(TreeNode* pRoot, int k){
        TreeNode* ans = NULL;
        KthNodeInorder(pRoot, k, ans);
        return ans;
    }

    void KthNodeInorder(TreeNode* pRoot, int &k, TreeNode* &ans){
        if(pRoot == NULL || k<=0)
            return;
        KthNodeInorder(pRoot->left, k, ans);
        k--;
        if(k == 0){
            // the current note is answer
            ans = pRoot;
            return;
        }
        KthNodeInorder(pRoot->right, k, ans);
    }
};

int main()
{
    return 0;
}

最新文章

  1. 《数据结构与算法Python语言描述》习题第二章第二题(python版)
  2. canvas标签(1)--线条、矩形、圆形、文本、阴影、抛小球
  3. 【温故而知新-Javascript】使用地理定位
  4. Exercise16_22.java
  5. Maven学习5-聚合与继承
  6. 使用pymongo需要手动关闭MongoDB Connection吗?
  7. android瀑布流效果(仿蘑菇街)
  8. CenOS7.1 vncserver@:1.service: control process exited, code=exited status=2
  9. 用ASP.Net写一个发送ICQ信息的程序
  10. [wikioi]没有上司的舞会
  11. git merge的recursive策略和merge-base
  12. 用Matlab完成:从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  13. 嵌入式linux的网络编程(1)--TCP/IP协议概述
  14. Chapter 1 First Sight——37
  15. css居中问题
  16. Lab 10-1
  17. 205. jetcache:你需要知道的小技巧
  18. LevelDB源码分析-TableBuilder生成sstable
  19. [svc]通过bridge连接单机的多个网络namespace
  20. 2019 B类

热门文章

  1. 【转】css清除浮动float的三种方法总结,为什么清浮动?浮动会有那些影响?
  2. JSP静态化(伪静态)
  3. Operating system hdu 2835 OPT
  4. ArcGIS RunTime SDK for Android之Features and graphics
  5. numpy学习整理
  6. Django进阶篇【2】
  7. Python面试题之copy/deepcopy详解
  8. ZOJ2724 Windows Message Queue 裸queue的模拟
  9. Android之View绘制流程源码分析
  10. Logcat monkey命令