剑指Offer(54)二叉搜索树的第K大结点
2018-01-25 21:54
375 查看
题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
算法:递归算法
数据结构:二叉搜索树
编程语言:C++
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
算法:递归算法
数据结构:二叉搜索树
编程语言: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==nullptr||k==0)//空值检测 return nullptr; return KthCore(pRoot,k);//防止每次递归都进行空值检测,并增强函数的复用性 } int count=0; TreeNode* KthCore(TreeNode* pRoot,int k) { TreeNode* target=nullptr;//目标的返回值 //遍历左子树 if(pRoot->left!=nullptr) { target=KthCore(pRoot->left,k); } count++; if(target==nullptr) { if(count==k) { target=pRoot; return target; } } //遍历右子树 if(target==nullptr&&pRoot->right!=nullptr) { target=KthCore(pRoot->right,k); } return target; } };
相关文章推荐
- 《剑指offer》刷题笔记(树):二叉搜索树的第k个结点
- 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
- 《剑指offer》二叉搜索树的第k个结点
- 二叉搜索树的第K大结点
- 剑指offer:二叉搜索树的第k个结点
- 剑指offer--面试题63:二叉搜索树的第k个结点
- 剑指offer—二叉搜索树的第k个结点
- 《剑指offer》:[63]二叉搜索树的第K个结点
- 剑指Offer:二叉搜索树的第K个结点
- 剑指Offer-54:二叉搜索树的第k大节点
- 剑指offer 面试题63:二叉搜索树的第k个结点(二叉树中序遍历的应用) 题解
- 给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
- 《剑指Offer》之“二叉搜索树的第k个结点”
- 剑指offer——面试题63:二叉搜索树的第k个结点
- 剑指Offer——二叉搜索树中第K大的节点
- 《剑指offer》面试题63 二叉搜索树的第k个结点
- 剑指offer——二叉搜索树的第k个结点(覆盖TreeSet的compare方法)
- 【剑指offer】面试题54:二叉搜索树的第k大节点
- 《剑指Offer》学习笔记--面试题63:二叉搜索树的第k个结点
- 剑指offer——二叉搜索树的第k个结点(一般)