[剑指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 ...
随机推荐
- js的非空校验
利用TagName获取元素名称,进行批量非空校验 var input = document.getElementsByTagName("input"); for (var i=0; ...
- echarts图表--统计图表
echarts官网图表API:http://echarts.baidu.com/index.html
- mysql 索引优化知识整理笔记
http://blog.csdn.net/zhxp_870516/article/details/8434539 http://www.jb51.net/article/49346.htm https ...
- hadoop-2
AsyncDispatcher,直接看代码 @Override protected void serviceStart() throws Exception { //start all the com ...
- Delphi 中的颜色常量及效果图
颜色名称 颜色效果 Hex HTML clBlack $000000 #000000 clMaroon $000080 #800000 clGreen $008000 #00800 ...
- C++复习:异常
异常处理机制专题 前言 1)异常是一种程序控制机制,与函数机制独立和互补 函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作 ...
- 1.ECS(CentOS7)主机名修改命令
命令:hostnamectl 使用--help参数查看hostnamectl里面每个参数对应的含义: [root@localhost ~]# hostnamectl --help Query or c ...
- unzip解压带密码的压缩包
// 解压 String pw = "123456"; String cmd = "unzip -P " + pw + " /root/lianlia ...
- 转:用JS获取地址栏参数的方法(超级简单)
转载链接: http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实 ...
- mac使用brew安装sshpass
brew安装sshpass brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Form ...