61、二叉搜索树的第k个结点
来源:互联网 发布:dcs编程软件 编辑:程序博客网 时间:2024/06/06 21:39
题目描述:给定一颗二叉搜索树,请找出其中的第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 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; }};
程序分析:以上图的例子为例, if(target==NULL)这一判断条件在这个例子中一共进了3次,分别如下图:
阅读全文
0 0
- 61、二叉搜索树的第k个结点
- 【二叉树】二叉搜索树的第k个结点
- 二叉搜索树第k个结点
- 【树14】二叉搜索树的第k个结点
- 剑指offerr--二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 《剑指offer》二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 剑指offer:二叉搜索树的第k个结点
- 58.二叉搜索树的第k个结点
- [剑指offer]二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第K个结点
- JS正则表达式使用验证账号、手机号、电话和邮箱
- SQL 约束 (Constraints)
- CLion 配置 C C++ 编译环境(MinGW)
- Android studio gradle中分渠道加载res、libraries及Class
- bug修复-android中的onCreate两个参数的方法是什么鬼?
- 61、二叉搜索树的第k个结点
- 数据转发中心高并发访问次数统计(mysql实现)
- javascript Array数组常用的方法
- (1798: [Ahoi2009]Seq 维护序列seq)<线段树乘法操作>
- docker--容器和镜像
- Java,bit比特,byte字节,char字符,short,int,long,float,double,string,字母,汉字/编码等
- 面试题7:用两个栈实现队列
- 关于地理数据坐标转换
- TimerTask定时执行删除文件