[剑指Offer]54-二叉搜索树的第k个节点
题目描述
给定一棵二叉搜索树,找出其中的第k小的结点,返回指向该节点的指针。
思路
中序遍历即可。
注意特判!报段错误数组越界这里就要考虑是少特判的问题。
法一:借助vector
法二(better)(学习的牛客网最佳解法):到第k个直接返回。
关键是理解:
if (pNode != nullptr) {
return pNode;
}
有了这句话,当遍历到第k小的节点时,返回该节点指针,并会一路传出来。没有的话,则只是传给上层父节点,后续会被覆盖。
当未到第k个时,(node接收的)返回值一直是空。到第k个后,一旦返回了root,那么node就不会为空了,就一直一层层的递归出去到结束了。
代码
法一:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if (pRoot == NULL || k <= 0) {//注意k=0
return NULL;
}
vector<TreeNode*> vec;
inorderTravel(pRoot,vec);
if((size_t) k>vec.size()) {//注意
return NULL;
}
return vec[k - 1];
}
private:
void inorderTravel(TreeNode* pRoot,vector<TreeNode*>& vec) {
if (pRoot == NULL) {
return;
}
else {
inorderTravel(pRoot->left,vec);
vec.push_back(pRoot);
inorderTravel(pRoot->right,vec);
}
}
};
法二:
class Solution {
public:
int cnt = 0;
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if (pRoot != nullptr) {
TreeNode* pNode=KthNode(pRoot->left, k);
if (pNode != nullptr) {
return pNode;
}
cnt++;
if (cnt == k) {
return pRoot;
}
pNode = KthNode(pRoot->right, k);
if (pNode != nullptr) {
return pNode;
}
}
return nullptr;
}
};
[剑指Offer]54-二叉搜索树的第k个节点的更多相关文章
- 力扣 - 剑指 Offer 54. 二叉搜索树的第k大节点
题目 剑指 Offer 54. 二叉搜索树的第k大节点 思路1 二叉搜索树的特性就是中序遍历结果为递增序列,而题目要求的是第 k 大节点,所以就应该是要遍历结果为降序, 按照先遍历左子树.输出节点.遍 ...
- 剑指 Offer 54. 二叉搜索树的第k大节点
题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 示例1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 示例2: 输入: root ...
- 每日一题 - 剑指 Offer 54. 二叉搜索树的第k大节点
题目信息 时间: 2019-07-04 题目链接:Leetcode tag:二叉搜索树 中序遍历 递归 难易程度:中等 题目描述: 给定一棵二叉搜索树,请找出其中第k大的节点. 示例1: 输入: ro ...
- 【Java】 剑指offer(54) 二叉搜索树的第k个结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定一棵二叉搜索树,请找出其中的第k小的结点. 思路 设置全局变量 ...
- 剑指offer——59二叉搜索树的第k大节点
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 题解: 考察的就是中序遍历 不过注意进行剪枝 cl ...
- 【剑指Offer】二叉搜索树的第k个结点 解题报告(Python)
[剑指Offer]二叉搜索树的第k个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...
- 剑指offer:二叉搜索树的第k个结点(中序遍历)
1. 题目描述 /* 给定一棵二叉搜索树,请找出其中的第k小的结点. 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. */ 2. 思路 中序遍历二叉搜索树,第K个就 ...
- 剑指offer 62. 二叉搜索树的第 k 个结点
62. 二叉搜索树的第 k 个结点 题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 法一: 非递归中序 ...
- Go语言实现:【剑指offer】二叉搜索树的第k个的结点
该题目来源于牛客网<剑指offer>专题. 给定一棵二叉搜索树,请找出其中的第k小的结点.例如,(5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. Go语言实现: ...
- 剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 例如, 5 / \ 3 7 / \ / \ 2 4 6 ...
随机推荐
- 【JEECG技术文档】JEECG 接口权限开发及配置使用说明
1.功能介绍 通过接口配置实现,对接口的访问权限控制和数据权限控制,接口时REST接口,接口权限认证机制使用Json web token (JWT) 接口权限调用流程: (1)通过接口用户的用户名 ...
- linux集群时间同步搭建
http://xstarcd.github.io/wiki/sysadmin/ntpd.html http://www.voidcn.com/blog/xuxudede1989/article/p-4 ...
- 揭开牙病之谜 与牙医说再见<转>
原贴地址:https://www.douban.com/group/topic/44383918/ -------------------------------------------------- ...
- c#与wpf的一些基础语法问题(摘用)
1 .在vs里不同cs文件,位于同一个namespace,是什么情况. 答:http://msdn.microsoft.com/zh-cn/library/0d941h9d(v=vs.80).aspx ...
- AS_简单的开始
1.注释 单行注释 // 多行注释 /* src */ 2.变量 变量名,可以包含字母.数字.下划线.$.但不以数字开头. 变量类型,是严格数据类型.AS有静态类型 ...
- DOTWeen 使用
using UnityEngine; using System.Collections; using DG.Tweening; using UnityEngine.UI; public class T ...
- 给tkinter文本框添加右键菜单
给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...
- 3D模板阴影原理
3D模板阴影原理 1:先从3dsMax中导出一个简单的场景,一个园环,球,平面. 2:园环直接面向光源,园环对球体来说是一个光线的阻挡物,园环在它上面形成阴影,同时,园环和球体对平面来说是光线的阻挡物 ...
- CommonJS/AMD/CMD/UMD
为什么会有这几种模式? 起源:Javascript模块化 模块化就是把复杂问题分解成不同模块,这样可维护性高,从而达到高复用,低耦合. 1.Commonjs CommonJS是服务器端模块的规范,No ...
- console.log() 字体颜色
console.log("%c%s", "color: #fff; background: #20B2AA; font-size: 24px;", " ...