描述

给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。

1.返回第k小的节点值即可

2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1

3.保证n个节点的值不一样

如输入{5,3,7,2,4,6,8},3时,二叉树{5,3,7,2,4,6,8}如下图所示:

该二叉树所有节点按结点值升序排列后可得[2,3,4,5,6,7,8],所以第3个结点的结点值为4,故返回对应结点值为4的结点即可。

 思路:

首先先遍历树(三种方式都可以)同时统计出它的节点数量,并且把每个结点的值都存到vector里(注意:不能是set,因为可能会有重复的值),再在主函数里判断节点数目和所求节点序号的关系(坑:k==0,肯定不存在第0小啊,所以这个输入也要返回-1)(这里没想到…希望二刷的时候可以注意到这里orz),若不满足题意返回-1,若满足题意,对vector进行排序,返回第k-1个值即可。

/*** struct TreeNode {*  int val;*   struct TreeNode *left;* struct TreeNode *right;*    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param proot TreeNode类 * @param k int整型 * @return int整型*/int cnt=0;vector<int> v;void Count(TreeNode *proot){if(proot){cnt++;v.push_back(proot->val);Count(proot->left);Count(proot->right);}}int KthNode(TreeNode* proot, int k) {// write code hereCount(proot);if(!proot||cnt<k||k==0)return -1;sort(v.begin(),v.end());return v[k-1];}
};

剑指offer-JZ54 二叉搜索树的第k个节点(附思路)相关推荐

  1. 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点

    [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...

  2. 剑指offer之二叉搜索树的第K个节点

    1 问题 给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5  3  7  2  4  6  8 中,按结点数值大小顺序第三个结点的值为4. 2 分析 二叉树定义:二叉查找树(Binary Se ...

  3. 剑指offer:二叉搜索树的第k个结点(中序遍历)

    1. 题目描述 /*给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. */ 2. 思路 中序遍历二叉搜索树,第K个就是结 ...

  4. 剑指offer之二叉搜索树的第K个结点

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 解题思路 二叉搜索树的中序遍历是顺序结构,利用中序遍历即可求 ...

  5. 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表

    [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...

  6. 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列

    [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...

  7. 剑指offer之二叉搜索树的后序遍历序列

    剑指offer之二叉搜索树的后序遍历序列 欢迎关注作者博客 简书传送门 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个 ...

  8. 剑指 Offer 33. 二叉搜索树的后序遍历序列

    剑指 Offer 33. 二叉搜索树的后序遍历序列 原始题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian- ...

  9. 【剑指offer】二叉搜索树转双向链表,C++实现

    原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...

最新文章

  1. mxnet中ndarray*ndarray用来作为掩码进行与运算的用法
  2. 一致性代码段和非一致性代码段【转】
  3. Stanford机器学习笔记-6. 学习模型的评估和选择
  4. Semaphore应用及原理
  5. CodeForces - 1287C Garland(贪心)
  6. css3实现背景渐变的方法
  7. 【算法笔记】B1058 选择题
  8. C语言基础函数(二)
  9. ansible的playbook进行yum批量安装nginx最新版本
  10. Java Base64与图片互转操作测试
  11. Java调用regester命令
  12. sun存储的串口连接管理_修改SUN设备管理IP的步骤
  13. 袋鼠云数据中台专栏(一) :浅析数据中台策略与建设实践
  14. Android如何查看手机网卡信息和ip信息
  15. 赵小楼《天道》深度解析(75)客观是对现有事实的认可,嘴上认可可不行,得心里认,否则就是自欺
  16. ruoyi-ui下载依赖报错npm ERR! cb() never called!
  17. 设置并访问另一台电脑的共享文件夹
  18. Ubuntu中使用RoboMongo实现MongoDB的可视化
  19. 基于winform(C#)的飞鸟小游戏
  20. 【渝粤教育】电大中专新媒体营销实务_1作业 题库

热门文章

  1. 8个球放入3个盒子方式_颜值与美味并存~分享几款私房盒子蛋糕做法,再也不用排队买了...
  2. JS-面向对象--创建具有私有属性的对象(2个方法)
  3. POI导出Execl文件,使JAVA虚拟机OOM
  4. java 实例 登录用户 equals的用法
  5. JavaScript重载解读
  6. css实现3行2列居中高度自适应布局
  7. MySQL_JDBC_数据库连接池
  8. Mr.J--代码雨( Matrix)
  9. VC++ .net 2005运行库解析
  10. 最可怕的八种黑客手段,网络攻击真是无孔不入!【转载】