二叉查找树查找指定排名元素的算法

本文介绍了如何在二叉查找树中查找排名为k的节点和根据键值计算排名的方法。关键在于理解任意节点的左子树节点都排在它前面,若左子树节点数不足,则需在右子树中继续查找。同时,提出了通过递归计算节点大小的策略,以及在节点中存储子树大小以优化复杂度的思路。
摘要由CSDN通过智能技术生成

问题如下:1.查找在二叉查找树中按大小排名为k的节点(如果元素x排名为k,则有k个元素排在x的前面,排名以0为起点),以升序排序

                     2.给出指定键值,返回其在二叉查找树中的排名,升序排序


第1个问题分析:1.任意节点的左子树中的所有节点一定排在自身前面

     2.如果左子树中节点不足,比如查找排名为6的节点,但左子树中只有3个节点,则在右子树中查找排名为k-左子树节点数-1(根)的节点

                     3.如果左子树的大小=k,则返回当前节点


因为需要频繁计算左子树的大小,所以我们使用一个名为size的函数来单独计算,size使用递归实现,但如果树极不平衡或树极大时栈的数量将不可接受,那时可在树节点中加入一个元素来记录每一个节点下的子树大小:


代码如下:

typedef TreeNode * Tree;
typedef TreeNode * TreePosition;
size_t size(Tree T)
{
	if (T == NULL)
		return 0;
	if (T->Left || T->Right)
	{
		if (T->Left == N
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值