数据结构代码题---Day05<视频对应Day45>

树结构相关代码题

题目01(对应视频45)

若二叉树采用链式存储结构,设求出指定结点在给定二叉排序树的层次

题目概念分析

  1. 指定结点,表示在函数参数位置上需要添加上结点参数
  2. 二叉排序树概念图

在这里插入图片描述
结合上述的操作分析,对于该题目代码编写分析,思路如下

  1. 先写核心代码,然后在加入框架
  2. 设置一个操作指针,指向根节点;
  3. 设置一个循环,使得当前点的数值与根节点数值进行比较,
  4. 若指定结点的数值小于当前结点的数值,则说明指定结点的数值小—则继续递归访问左子树(左子树的数值小于根节点的数值
  5. 若指定结点的数值大于当前结点的数值,则递归访问右子树
  6. 设置一个变量level表示当前的层数数值,初始化为1,因为根节点只要存在第一层便是1;

核心代码编写

  • 先给出结构体代码:
typedef struct TNODE
{	
	ElemType data;//数据域
	struct BiTree* lchild,*rchild;//左右指针域
}BTNODE,* BiTree;

核心实现代码:

int GetSortTreeLevel(BiTree * root ,BiTree * p)//p为制定节点
{
	//设置操作指针
	BiTree * bt = root;
	if(bt == NULL){//树为空返回0
		return 0;
	}
	if(bt != NULL){
		while(bt->data != p->data){//循环条件
			if(p->data < bt->data){//指定数值比当前的小
				bt = bt->lchild;//去访问其左子树
			}else{
				//否则去访问右子树
				//这里包括了当前的数值相等的情况,若相等则直接跳出循环,不会影响程序
				bt = bt->rchild;	
			}
			++level;//进行层数的添加,表示已经进入下一层了
		}
		//出循环了,说明这里是循环结束的部分
		//bt->data == p->data


	}
}

代码整合

在给出核心代码后,对整体代码框架进行整合,如下:

typedef struct TNODE
{	
	ElemType data;//数据域
	struct BiTree* lchild,*rchild;//左右指针域
}BTNODE,* BiTree;

int GetSortTreeLevel(BiTree * root ,BiTree * p)//p为制定节点
{
	int level = 1;
	//设置操作指针
	BiTree * bt = root;
	if(bt == NULL){//树为空返回0
		return 0;
	}
	if(bt != NULL){
		while(bt->data != p->data){//循环条件
			if(p->data < bt->data){//指定数值比当前的小
				bt = bt->lchild;//去访问其左子树
			}else{
				//否则去访问右子树
				//这里包括了当前的数值相等的情况,若相等则直接跳出循环,不会影响程序
				bt = bt->rchild;	
			}
			++level;//进行层数的添加,表示已经进入下一层了
		}
		//出循环了,说明这里是循环结束的部分
		//bt->data == p->data
		return level;
	}

}

注:

个人代码问题或需要程序编写辅导服务等问题请加闲鱼【代码无bug】
或点击下面链接跳转闲鱼进行咨询

闲鱼链接

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值