剑指offer——二叉搜索树的第k个节点
来源:互联网 发布:淘宝怎么开网店多少钱 编辑:程序博客网 时间:2024/06/10 20:46
1. 题目描述
&esmp;&esmp;给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
2. 思路分析
&esmp;&esmp;首先一点要清晰二叉搜索树的特点,也就是:左孩子<父节点<右孩子。所以,根据这一特点可知,二叉搜索树的中序遍历结果就是一个升序的序列。题目中的实例可知,是将二叉搜索树的元素升序排列后找到第k个元素。
&esmp;&esmp;思路就是从根节点一直遍历左孩子,如果左子树的遍历中有遍历结果,就返回结果,如果结果NULL则进行下一步判断 –> 首先对计数器加一(即NULL的叶子节点为零),然后判断当前节点是不是目标节点,通过比较计数器cnt和k,如果相等,当前节点极为目标节点,如果不等就对其右子树进行遍历,返回右子树的遍历结果即可。
3. 解答(c++)
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int cnt = 0; TreeNode* KthNode(TreeNode* pRoot, int k) { if (pRoot == NULL || k <= 0) return NULL; //if (k == cnt) //return pRoot; TreeNode* answer; if (pRoot->left != NULL) { answer = KthNode(pRoot->left, k); } if (answer != NULL) return answer; ++cnt; if (cnt == k) return pRoot; answer = KthNode(pRoot->right, k); if (answer != NULL) return answer; return NULL; }};
阅读全文
0 0
- 剑指offer-二叉搜索树的第K个节点
- 剑指offer——二叉搜索树的第k个节点
- 剑指offer系列之六十一:二叉树搜索树的第k个节点
- 剑指offer 63 - 二叉搜索树的第K个节点
- 剑指offer----二叉搜索树的第K个节点----java实现
- 剑指offer面试题63:二叉搜索树的第k个节点 Java实现
- 剑指Offer--二叉搜索树的第K个节点-不会
- 【剑指offer】题63:二叉搜索树的第k个节点
- 《剑指offer》二叉搜索树的第k个结点
- 剑指offer:二叉搜索树的第k个结点
- [剑指offer]二叉搜索树的第k个结点
- 剑指offer-二叉搜索树的第k个结点
- 【剑指Offer】二叉搜索树的第k个结点
- 剑指offer 二叉搜索树的第k个结点
- 剑指Offer:二叉搜索树的第K个结点
- 剑指offer-二叉搜索树的第k个结点
- 剑指Offer------二叉搜索树的第k个结点
- 剑指offer---二叉搜索树的第k个结点
- win7环境下,全部更新pip的安装包
- curl命令Post Json
- 怎样有效降低测试的轮次?
- ThinkPHP缓存案例
- 关于渠道包
- 剑指offer——二叉搜索树的第k个节点
- python time和datetime区别
- JavaWeb学习总结——Servlet监听器
- 正向代理与反向代理的区别
- OGG12.2如何extract LOB数据
- 以太坊黄皮书翻译连载-1-20170828
- 根据长文本拆分至内表
- UVA
- 聚簇索引和非聚簇索引