求二叉树的深度(深度优先)用栈

来源:百度知道 编辑:UC知道 时间:2024/06/19 09:59:37
用栈来实现(C语言)
数据结构如下
typedef char DataType;
typedef struct TNode{
DataType data;
struct TNode *lchild,*rchild;
}TNode,*BiTree;

函数接口
int BiTreeDepth( BiTree boot);
返回二叉树的深度

要用到的有关栈的函数的实现不用写

int BiTreeDepth( btnode * b)
{
struct
{
int lno;//保存结点的层数
btnode * p;
}Q[MAXSIZE];//建立队列
int front,rear;
int lnum;
front=rear=0;
if(b!=NULL)
{
rear++;
Q[rear].p=b;
Q[rear].lno=1;
while(rear!=front)
{
front++;
b=Q[front].p;
lnum=Q[front].lno;
if(b->lchild!=NULL)
{
rear++;
Q[rear].p=b->lchild;
Q[rear].lno=lnum+1;
}
if(b->rchild!=NULL)
{
rear++;
Q[rear].p=b->rchild ;
Q[rear].lno=lnum+1;
}
}
}
return Q[rear].lno;
}
这是我的实验程序,我的btnode相当于你的TNode,你可以自己修改一下哈。这段程序很有用的,它建立一个队列,并且给每个树的结点编上了层号,如果你把这个队列进行出队输出,输出的为树按层次遍历的序列。当然也可以用这个程序求二叉树的宽度:
int btwidth(btnode *b)//求二叉树的宽度
{
struct
{
int lno;//保存结点的层数
btnode * p;
}Q[MAXSIZE];//建立队列
int front,rear;
int lnum,max,i,n;
f