剑指offer——面试题63:二叉搜索树的第k个结点
剑指offer——面试题63:二叉搜索树的第k个结点
Solution1:
20180916重做
/*
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)return NULL;vector<struct TreeNode*> result;Pre_travel(pRoot, result);if(result.size() < k)return NULL;return result[k - 1];}void Pre_travel(struct TreeNode* pRoot, vector<struct TreeNode*> &res) {if (!pRoot)return;if(pRoot->left)Pre_travel(pRoot->left, res);res.push_back(pRoot);if(pRoot->right)Pre_travel(pRoot->right, res);}
};
Solution2:
利用二叉搜索树已经有序的性质,直接用中序遍历,得到第k个点返回即可~~~
注意在写递归时,很容易陷进无限递归中导致栈溢出。故递归结束条件应当明确!
/*
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)return NULL;return Inorder_travel(pRoot, k);}struct TreeNode* Inorder_travel(struct TreeNode *pRoot, int &k) {struct TreeNode *res = NULL;if(pRoot->left != NULL)res = Inorder_travel(pRoot->left, k);if(res == NULL) {if(k == 1)res = pRoot;k--;}if(res == NULL && pRoot->right != NULL)res = Inorder_travel(pRoot->right, k);return res;}
};
剑指offer——面试题63:二叉搜索树的第k个结点相关推荐
- 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)
1. 题目 给定一棵二叉搜索树,请找出其中第k大的节点. 示例 1: 输入: root = [3,1,4,null,2], k = 13/ \1 4\2 输出: 4示例 2: 输入: root = [ ...
- 剑指offer面试题54. 二叉搜索树的第k大节点(逆中序遍历)
题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 思路 详见链接 代码 class Solution:def kthLargest(self, root:TreeNode, k:int)-> ...
- 剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)
1. 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 特别地,我们希望可以就地完成转换操作.当转化完成以后,树中节点的左指 ...
- 剑指Offer - 面试题33. 二叉搜索树的后序遍历序列(递归)
1. 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树:5/ \2 6 ...
- 剑指offer面试题[27]-二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. /* struct TreeNode {int val;struct Tr ...
- 剑指offer面试题36. 二叉搜索树与双向链表(中序遍历)(递归)
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 思路 详见链接 代码 #class Node: # def __ini ...
- 剑指offer面试题33. 二叉搜索树的后序遍历序列(二叉树)(递归)
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 思路 详见链接 代码 class Sol ...
- 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列
剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...
- 【剑指Offer】23、二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路: 对于后续遍历序列,序 ...
- 剑指offer(C++)-JZ33:二叉搜索树的后序遍历序列(数据结构-树)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回 tru ...
最新文章
- 详解Printjack打印机攻击
- asp.net网页出现名称以无效字符开头的解决方法
- sql 计算空间列两地点之间距离
- Android 使用Jsoup解析Html
- 训练损失越来越大_无需contrastive学习,微软亚研提基于实例分类无监督预训练方法...
- ashx误删后,未能创建类型
- cassandra连不上,报Stop listening for CQL clients, Failed managing commit log segments
- Oralce中日期格式
- 深入理解Spark 2.1 Core (十):Shuffle Map 端的原理与源码分析
- CF235D-Graph Game【LCA,数学期望】
- 渗透之cookie截取
- Linux 查看盘结构命令
- (转)淘淘商城系列——实现图片上传功能
- 【java】Java 8 - 移除Permgen 使用元空间
- EDC(Enterprise Data Center 企业数据中心)
- 如何使用ShoeBox和PhotoShop制作出漂亮的Fnt字体
- SPSS统计分析与行业应用案例详解
- Swagger注解生成插件
- # 鸡汤贴(汇聚三观摘要)
- Python3绘图库之rrdtool模块
热门文章
- PAT刷题笔记-PAT乙1018-锤子剪刀布
- visual studio 删除附加项
- 【OpenCV】图像金字塔详解及编程实现
- android菜单更改,Android修改分析:删除设置中菜单
- 全国统考计算机网考题库,全国统考计算机网考题库教程.doc
- ffmpeg播放器 android,Android 调用ffmpeg 播放器开发(一)
- dpf linux安装db2_值得一看!数据库及Mysql入门,附详细安装教程
- linux下udf光盘权限问题,linux - 关于mysql udf权限的问题?
- rds 数据库营销报告_《营销自动化从入门到精通》第五章 集成营销自动化工具与CRM...
- word2010添加b5纸张大小_【仁美文化】散文:薄如纸张