剑指offer-JZ54 二叉搜索树的第k个节点(附思路)
描述
给定一棵结点数为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个节点(附思路)相关推荐
- 【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 文章目录 [LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点 一.中序遍历(提前返回) 一.中序遍历(提前返回) ...
- 剑指offer之二叉搜索树的第K个节点
1 问题 给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5 3 7 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 2 分析 二叉树定义:二叉查找树(Binary Se ...
- 剑指offer:二叉搜索树的第k个结点(中序遍历)
1. 题目描述 /*给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. */ 2. 思路 中序遍历二叉搜索树,第K个就是结 ...
- 剑指offer之二叉搜索树的第K个结点
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 解题思路 二叉搜索树的中序遍历是顺序结构,利用中序遍历即可求 ...
- 【LeetCode】剑指 Offer 36. 二叉搜索树与双向链表
[LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 文章目录 [LeetCode]剑指 Offer 36. 二叉搜索树与双向链表 package offer;//定义节点 class ...
- 【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列
[LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 文章目录 [LeetCode]剑指 Offer 33. 二叉搜索树的后序遍历序列 package offer;public cl ...
- 剑指offer之二叉搜索树的后序遍历序列
剑指offer之二叉搜索树的后序遍历序列 欢迎关注作者博客 简书传送门 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个 ...
- 剑指 Offer 33. 二叉搜索树的后序遍历序列
剑指 Offer 33. 二叉搜索树的后序遍历序列 原始题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian- ...
- 【剑指offer】二叉搜索树转双向链表,C++实现
原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...
最新文章
- mxnet中ndarray*ndarray用来作为掩码进行与运算的用法
- 一致性代码段和非一致性代码段【转】
- Stanford机器学习笔记-6. 学习模型的评估和选择
- Semaphore应用及原理
- CodeForces - 1287C Garland(贪心)
- css3实现背景渐变的方法
- 【算法笔记】B1058 选择题
- C语言基础函数(二)
- ansible的playbook进行yum批量安装nginx最新版本
- Java Base64与图片互转操作测试
- Java调用regester命令
- sun存储的串口连接管理_修改SUN设备管理IP的步骤
- 袋鼠云数据中台专栏(一) :浅析数据中台策略与建设实践
- Android如何查看手机网卡信息和ip信息
- 赵小楼《天道》深度解析(75)客观是对现有事实的认可,嘴上认可可不行,得心里认,否则就是自欺
- ruoyi-ui下载依赖报错npm ERR! cb() never called!
- 设置并访问另一台电脑的共享文件夹
- Ubuntu中使用RoboMongo实现MongoDB的可视化
- 基于winform(C#)的飞鸟小游戏
- 【渝粤教育】电大中专新媒体营销实务_1作业 题库
热门文章
- 8个球放入3个盒子方式_颜值与美味并存~分享几款私房盒子蛋糕做法,再也不用排队买了...
- JS-面向对象--创建具有私有属性的对象(2个方法)
- POI导出Execl文件,使JAVA虚拟机OOM
- java 实例 登录用户 equals的用法
- JavaScript重载解读
- css实现3行2列居中高度自适应布局
- MySQL_JDBC_数据库连接池
- Mr.J--代码雨( Matrix)
- VC++ .net 2005运行库解析
- 最可怕的八种黑客手段,网络攻击真是无孔不入!【转载】