#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开始算深度的,就是根节点是深度下。
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));
}
题呢?
语言是相通的:
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;
}