剑指offer——二叉搜索树的第K大节点

题目:给定一棵二叉搜索树,请找出其中第k大的节点。例如,在下图中的二叉搜索树里,按照节点数值大小顺序,第三大节点的值是4。

 

 思路:

          注意到这是一个二叉搜索树,二叉搜索树的中序遍历就是一个递增的序列,所以这道题就只用中序遍历数组一下,然后找出第k大的值就好了。思路不难,但是代码要多写几遍。

 

代码:

struct BinaryTreeNode
{
	int               m_nValeue;
	BinaryTreeNode*    m_pLeft;
	BinaryTreeNode*    m_pRight;
};

BinaryTreeNode* KthNode(BinaryTreeNode* pRoot, unsigned int k)
{
	if (pRoot == nullptr || k == 0)
		return nullptr;
}


BinaryTreeNode*KthNodeCore(BinaryTreeNode*pRoot, unsigned int&k)
{
	BinaryTreeNode* target = nullptr;

	if (pRoot->m_pLeft != nullptr)
		target = KthNodeCore(pRoot->m_pLeft, k);

	if (target == nullptr)
	{
		if (k == 1)
			target = pRoot;

		k--;
	}

	if (target == nullptr&&pRoot->m_pRight != nullptr)
		target = KthNodeCore(pRoot->m_pRight, k);

	return target;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值