二叉搜索树的第k个节点
2017-03-28 09:39
232 查看
题目描述:给定一颗二叉搜索树,请找出其中的第k大的节点。
只需中序遍历一颗二叉搜索树,就很容易找出它的第k大节点
非递归方法:
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot==nullptr || k<=0)
return nullptr;
int cnt=0;
stack<TreeNode*>s;
TreeNode* p = pRoot;
while(p != nullptr || !s.empty())
{
while(p!=nullptr)
{
s.push(p);
p=p->left;
}
TreeNode* pNode=s.top();
s.pop();
if(++cnt==k)
return pNode;
p=pNode->right;
}
return nullptr;
}
};递归方法:
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot==nullptr)
return nullptr;
return KthNodeCore(pRoot,k);
}
TreeNode*KthNodeCore(TreeNode* pRoot, int &k)
{
TreeNode* pNode=nullptr;
if(pRoot->left != nullptr)
pNode=KthNodeCore(pRoot->left, k);
if(pNode==nullptr)
{
if(k==1)
pNode=pRoot;
k--;
}
if(pNode == NULL && pRoot->right != nullptr)
pNode=KthNodeCore(pRoot->right, k);
return pNode;
}
};
只需中序遍历一颗二叉搜索树,就很容易找出它的第k大节点
非递归方法:
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot==nullptr || k<=0)
return nullptr;
int cnt=0;
stack<TreeNode*>s;
TreeNode* p = pRoot;
while(p != nullptr || !s.empty())
{
while(p!=nullptr)
{
s.push(p);
p=p->left;
}
TreeNode* pNode=s.top();
s.pop();
if(++cnt==k)
return pNode;
p=pNode->right;
}
return nullptr;
}
};递归方法:
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot==nullptr)
return nullptr;
return KthNodeCore(pRoot,k);
}
TreeNode*KthNodeCore(TreeNode* pRoot, int &k)
{
TreeNode* pNode=nullptr;
if(pRoot->left != nullptr)
pNode=KthNodeCore(pRoot->left, k);
if(pNode==nullptr)
{
if(k==1)
pNode=pRoot;
k--;
}
if(pNode == NULL && pRoot->right != nullptr)
pNode=KthNodeCore(pRoot->right, k);
return pNode;
}
};
相关文章推荐
- 从二叉搜索树的第k个节点问题看递归如何返回普通变量和对象
- 剑指offer----二叉搜索树的第K个节点----java实现
- 求二叉搜索树中第k个节点
- 二叉搜索树的第k个节点
- 剑指offer-二叉搜索树的第K个节点
- 62、二叉搜索树的第K个节点
- 二叉搜索树的第K个节点
- 剑指offer面试题63:二叉搜索树的第k个节点 Java实现
- 剑指offer——二叉搜索树的第k个节点
- 二叉搜索树的第K个节点
- Python:二叉搜索树的第k个节点
- 二叉搜索树的第k个节点(java版)
- 二叉搜索树的第k个节点
- 二叉搜索树的第K个节点
- 二叉搜索树的第k个节点
- 求二叉搜索树的第k个节点
- 二叉搜索树的第k个节点
- 二叉搜索树的第K个节点
- 剑指offer_二叉搜索树的第k个节点
- 【剑指offer】题63:二叉搜索树的第k个节点