写一个求二叉树的深度的算法

2025-03-06 04:05:07
推荐回答(4个)
回答1:

#include
#include

typedef struct node
{
char data;
struct node *left,*right;
}Node,*PNode;
PNode createBtree(PNode root)//创建二叉树,控制台下输入,基于先序遍历输入
{
char data;
scanf("%c",&data);
if (data==' ')
{
root=NULL;
return root;
}
root = (PNode)malloc(sizeof(Node));
root->data = data;
root->left = createBtree(root->left);
root->right = createBtree(root->right);

return root;
}

int depth(PNode root)//这就是你要的函数。
{
int ld,rd;
if (root==NULL)
{
return 0;
}
ld = 1+depth(root->left);
rd = 1+depth(root->right);
return ld>rd?ld:rd;
}
int main()
{
PNode root=NULL;
root = createBtree(root);
printf("%d",depth(root));
return 0;
}

为了测试,写了二叉树的建立程序;
如下输入可以看到结果
虚节点用空格输入的。例如你输入
先序遍历
234空格空格5空格6空格空格7空格空格回车就可以看到结果。
另外,本算法是从1开始算深度的,就是根节点是深度下。

回答2:

typedef
struct
tree//二叉树的定义
{
char
data;
struct
tree
*lchild,*rchild;
}tree,*tree;
void
create(tree
t)//创建一棵二叉树
{
char
ch;
scanf("%c",&ch);
if(ch=='#')
t=null;
else
{
t->data=ch;
create(t->lchild);
create(t->rchild);
}
}
int
deep(tree
t)//深度算法
{
if(!t)
return
0;
else
{
ld=deep(t->lchild);
rd=deep(t->rchild);
if(ld>rd)
return
rd+1;
else
return
ld+1;
}
void
main()//主函数
{
tree
t;
create(t);
printf("%d\n",deep(t));
}

回答3:

题呢?

回答4:

语言是相通的:
int deep(treenode* root)
{
if(root==NULL)
return 0;
else
{
int lsize=deep(root->left);
int rsize=deep(root->right);
}
if(lsize>rsize)
return lsize+1;
else
return rsize+1;
}