树结构相关代码题
题目01(对应视频45)
若二叉树采用链式存储结构,设求出指定结点在给定二叉排序树的层次
题目概念分析
- 指定结点,表示在函数参数位置上需要添加上结点参数
- 二叉排序树概念图
结合上述的操作分析,对于该题目代码编写分析,思路如下
- 先写核心代码,然后在加入框架
- 设置一个操作指针,指向根节点;
- 设置一个循环,使得当前点的数值与根节点数值进行比较,
- 若指定结点的数值小于当前结点的数值,则说明指定结点的数值小—则继续递归访问左子树(左子树的数值小于根节点的数值)
- 若指定结点的数值大于当前结点的数值,则递归访问右子树。
- 设置一个变量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】
或点击下面链接跳转闲鱼进行咨询