二叉搜索树的第K个节点
2017-10-21 21:14
302 查看
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 24 6 8 中,按结点数值大小顺序第三个结点的值为4。
一刷:
两种方法,递归和非递归用中序遍历。
问题主要出在写中序遍历的时候,一个是没有加判断条件k>0, 一个是没有考虑到k比实际取数组的值大1.
class Solution {
public:
int count = 0;
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot){
TreeNode* res = KthNode(pRoot->left, k);
if(res) return res;
if(++count == k) return pRoot;
res = KthNode(pRoot->right, k);
if(res) return res;
}
return nullptr;
}
};
一刷:
两种方法,递归和非递归用中序遍历。
问题主要出在写中序遍历的时候,一个是没有加判断条件k>0, 一个是没有考虑到k比实际取数组的值大1.
class Solution {
public:
int count = 0;
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot){
TreeNode* res = KthNode(pRoot->left, k);
if(res) return res;
if(++count == k) return pRoot;
res = KthNode(pRoot->right, k);
if(res) return res;
}
return nullptr;
}
};
* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: vector<TreeNode*> res; TreeNode* KthNode(TreeNode* pRoot, int k) { if(pRoot && k > 0){ inOrder(res, pRoot); if(k <= res.size()) return res[k-1]; } return nullptr; } void inOrder(vector<TreeNode*>& res, TreeNode* pRoot){ if(pRoot == NULL) return; inOrder(res, pRoot->left); res.push_back(pRoot); inOrder(res, pRoot->right); } };
相关文章推荐
- 二叉搜索树的第k个节点
- 剑指offer——二叉搜索树的第k个节点
- 二叉搜索树的第K个节点:递归中用参数返回值。
- 求二叉搜索树的第k个节点
- 二叉搜索树的第K个节点
- 面试题63:二叉搜索树的第K个节点
- 二叉搜索树的第k个节点
- 剑指offer----二叉搜索树的第K个节点----java实现
- 求二叉搜索树中第k个节点
- 剑指offer_二叉搜索树的第k个节点
- 剑指offer面试题63:二叉搜索树的第k个节点 Java实现
- 【剑指offer】题63:二叉搜索树的第k个节点
- 剑指offer-二叉搜索树的第K个节点
- 剑指Offer--二叉搜索树的第K个节点-不会
- 二叉搜索树的第K个节点
- Python:二叉搜索树的第k个节点
- 二叉搜索树的第k个节点
- 二叉搜索树的第K个节点
- 二叉搜索树的第k个节点
- 二叉搜索树的第k个节点(java版)