《剑指offer》刷题笔记(树):二叉搜索树的第k个结点

来源:互联网 发布:四代目大和辰之 淘宝 编辑:程序博客网 时间:2024/06/14 06:59

《剑指offer》刷题笔记(树):二叉搜索树的第k个结点


  • 转载请注明作者和出处:http://blog.csdn.net/u011475210
  • 代码地址:https://github.com/WordZzzz/Note/tree/master/AtOffer
  • 刷题平台:https://www.nowcoder.com/
  • 题  库:剑指offer
  • 编  者:WordZzzz

  • 剑指offer刷题笔记树二叉搜索树的第k个结点
    • 题目描述
    • 解题思路
    • C版代码实现

题目描述

给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。

解题思路

我感觉大家都很容易就能想到中序遍历,因为二叉搜索树本来就是排序的,左结点小于根结点小于右结点,这个顺序正好和中序遍历的顺序一样。参考代码如下,其中遍历右子树的时候多加了对target == NULL 的判断,意思是如果target有值了就没必要往下再遍历了。

C++版代码实现

/*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 < 1)            return NULL;        return KthNodeCore(pRoot, k);    }    TreeNode* KthNodeCore(TreeNode* pRoot, int &k){        TreeNode* target = NULL;        if(pRoot->left != NULL)            target = KthNodeCore(pRoot->left, k);        if(target == NULL){            if(k == 1)                target = pRoot;            k--;        }        if(target == NULL && pRoot->right != NULL)            target = KthNodeCore(pRoot->right, k);        return target;    }};

系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~

完的汪(∪。∪)。。。zzz

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎样学习web前端 web前端学习网站 前端开发学习 网页前端开发工程师 什么是web前端开发 前端页面框架 前端开发入门 web前端是干嘛的 web前端项目实例 前端技术有哪些 web前端工程师学多久 web前端开发工具 前端开发教程 前端包括哪些 前端包括什么 前端技术论坛 web前端资源网 前端工程师学习 上海web前端培训机构 前端开发语言 web前端好学吗 web前端框架有哪些 前端开发框架 前端就业前景 网站前端是做什么 前端工程师培训 前端是程序员吗 前端是什么意思 自学前端开发 web前端开发用什么软件 web前端开发都学什么 前端需要掌握的技术 前端开发流程 前端性能优化 web前端开发是干嘛的 做前端好还是后端好 web前端培训班 web前端自学要多久 web前端基础知识 网络前端是什么 零基础学web前端