代码1:
void getLevel(BTNode *t,int level,char x,int *p)//用level记录当前访问层数,用p记录结点所在层数;
{
if(t)
{
level++;
if(t->data==x)
{
*p=level;
}
getLevel(t->lchild,level,x,p);
getLevel(t->rchild,level,x,p);
}
}
代码2:
int L=1;//L是全局变量,初值为1,用来记录当前所访问的结点层号
void getLevel1(BTNode *p,char x){
if(p){
if(p->data==x){
cout<<L<<endl;
}
++L;//p指针要进入下一层,所以自增1
getLevel1(p->lchild,x);
getLevel1(p->lchild,x);
--L;// p指针要从下一层返回到上一层,所以要自减1
}
}
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...
#define MAXSIZE 100
//用于使用c++的输出语句
#include<iostream>
using namespace std;
typedef struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void getLevel(BTNode *t,int level,char x,int *p);
void getLevel1(BTNode *p,char x);
void createBiTree(BTNode* &T);
void main(){
BTNode *t;
createBiTree(t);
cout<<"输入要查找的结点:"<<endl;
char ch;
cin>>ch;
int level=0,p;
getLevel(t,level,ch,&p);
cout<<p<<endl;
getLevel1(t,ch);
}
void getLevel(BTNode *t,int level,char x,int *p)//用level记录当前访问层数,用p记录结点所在层数;
{
if(t)
{
level++;
if(t->data==x)
{
*p=level;
}
getLevel(t->lchild,level,x,p);
getLevel(t->rchild,level,x,p);
}
}
int L=1;//L是全局变量,初值为1,用来记录当前所访问的结点层号
void getLevel1(BTNode *p,char x){
if(p){
if(p->data==x){
cout<<L<<endl;
}
++L;//p指针要进入下一层,所以自增1
getLevel1(p->lchild,x);
getLevel1(p->lchild,x);
--L;// p指针要从下一层返回到上一层,所以要自减1
}
}
void createBiTree(BTNode* &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=(BTNode *)malloc(sizeof(BTNode));
T->data=ch;
cout<<"put in \'"<<T->data<<"\' lchild"<<endl;
createBiTree(T->lchild);
cout<<"put in \'"<<T->data<<"\' rchild"<<endl;
createBiTree(T->rchild);
}
}
这篇博客介绍如何使用二叉链表存储结构,在二叉树中寻找给定值x的节点所在的层号。通过代码实现和测试,详细解析了算法的执行过程。

被折叠的 条评论
为什么被折叠?



