剑指offer(C++)——二叉搜索树的第k个结点
2017-04-19 10:39
351 查看
题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 按结点数值大小顺序第三个结点的值为4。
思路:根据二叉搜索树的特点,中序遍历的数值是递增排序的,因此,只需中序遍历二叉搜索树就能找到第k大结点。
如上面的二叉树,中序遍历结果为 {2,3,4,5,6,7,8},第三个结点的值为4
/*思路:根据二叉搜索树的特点,中序遍历的数值是递增排序的,因此,只需中序遍历二叉搜索树就能找到第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 kthnode(pRoot, k); } TreeNode* kthnode(TreeNode* pRoot, int& k) //中序遍历查找第k个结点 { TreeNode* target = NULL; if (pRoot->left != NULL) target = kthnode(pRoot->left, k); if (target == NULL) { if (k == 1) target = pRoot; --k; } if (pRoot->right&&target == NULL) target = kthnode(pRoot->right, k); return target; } };
相关文章推荐
- (C++)剑指offer-62:二叉搜索树的第k个结点(树)(再理解)
- 剑指offer 63题 【树】二叉搜索树的第k个结点
- 剑指offer-62.二叉搜索树的第k个结点
- 【剑指offer-解题系列(63)】二叉搜索树的第k个结点
- 【剑指Offer学习】【面试题63:二叉搜索树的第k个结点】
- [剑指offer]二叉搜索树的第k个结点
- 【剑指Offer】面试题63:二叉搜索树的第k个结点
- 剑指offer---二叉搜索树的第k个结点
- 剑指Offer—62—二叉搜索树的第k个结点
- (C++)剑指offer-14:链表中倒数第k个结点(代码的鲁棒性)
- 剑指offer:二叉搜索树的第k个结点
- 剑指offer-二叉搜索树的第k个结点
- 剑指offer—二叉搜索树的第k个结点
- 剑指offer(六十二)之二叉搜索树的第k个结点
- 剑指offer面试题目63(二叉搜索树的第k个结点)
- 剑指offer-面试题63-二叉搜索树的第k个结点
- 剑指offer——二叉搜索树的第k个结点
- 剑指offer 编程题(59):二叉搜索树的第k个结点
- 剑指Offer------二叉搜索树的第k个结点
- 剑指offer_二叉树---二叉搜索树的第k个结点