剑指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个结点相关推荐

  1. 剑指Offer - 面试题54. 二叉搜索树的第k大节点(二叉树循环遍历)

    1. 题目 给定一棵二叉搜索树,请找出其中第k大的节点. 示例 1: 输入: root = [3,1,4,null,2], k = 13/ \1 4\2 输出: 4示例 2: 输入: root = [ ...

  2. 剑指offer面试题54. 二叉搜索树的第k大节点(逆中序遍历)

    题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 思路 详见链接 代码 class Solution:def kthLargest(self, root:TreeNode, k:int)-> ...

  3. 剑指Offer - 面试题36. 二叉搜索树与双向链表(中序循环/递归)

    1. 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 特别地,我们希望可以就地完成转换操作.当转化完成以后,树中节点的左指 ...

  4. 剑指Offer - 面试题33. 二叉搜索树的后序遍历序列(递归)

    1. 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 参考以下这颗二叉搜索树:5/ \2 6 ...

  5. 剑指offer面试题[27]-二叉搜索树与双向链表

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. /* struct TreeNode {int val;struct Tr ...

  6. 剑指offer面试题36. 二叉搜索树与双向链表(中序遍历)(递归)

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 思路 详见链接 代码 #class Node: # def __ini ...

  7. 剑指offer面试题33. 二叉搜索树的后序遍历序列(二叉树)(递归)

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 true,否则返回 false.假设输入的数组的任意两个数字都互不相同. 思路 详见链接 代码 class Sol ...

  8. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  9. 【剑指Offer】23、二叉搜索树的后序遍历序列

      题目描述:   输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   解题思路:   对于后续遍历序列,序 ...

  10. 剑指offer(C++)-JZ33:二叉搜索树的后序遍历序列(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回 tru ...

最新文章

  1. 详解Printjack打印机攻击
  2. asp.net网页出现名称以无效字符开头的解决方法
  3. sql 计算空间列两地点之间距离
  4. Android 使用Jsoup解析Html
  5. 训练损失越来越大_无需contrastive学习,微软亚研提基于实例分类无监督预训练方法...
  6. ashx误删后,未能创建类型
  7. cassandra连不上,报Stop listening for CQL clients, Failed managing commit log segments
  8. Oralce中日期格式
  9. 深入理解Spark 2.1 Core (十):Shuffle Map 端的原理与源码分析
  10. CF235D-Graph Game【LCA,数学期望】
  11. 渗透之cookie截取
  12. Linux 查看盘结构命令
  13. (转)淘淘商城系列——实现图片上传功能
  14. 【java】Java 8 - 移除Permgen 使用元空间
  15. EDC(Enterprise Data Center 企业数据中心)
  16. 如何使用ShoeBox和PhotoShop制作出漂亮的Fnt字体
  17. SPSS统计分析与行业应用案例详解
  18. Swagger注解生成插件
  19. # 鸡汤贴(汇聚三观摘要)
  20. Python3绘图库之rrdtool模块

热门文章

  1. PAT刷题笔记-PAT乙1018-锤子剪刀布
  2. visual studio 删除附加项
  3. 【OpenCV】图像金字塔详解及编程实现
  4. android菜单更改,Android修改分析:删除设置中菜单
  5. 全国统考计算机网考题库,全国统考计算机网考题库教程.doc
  6. ffmpeg播放器 android,Android 调用ffmpeg 播放器开发(一)
  7. dpf linux安装db2_值得一看!数据库及Mysql入门,附详细安装教程
  8. linux下udf光盘权限问题,linux - 关于mysql udf权限的问题?
  9. rds 数据库营销报告_《营销自动化从入门到精通》第五章 集成营销自动化工具与CRM...
  10. word2010添加b5纸张大小_【仁美文化】散文:薄如纸张