题目:给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0 0
。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。叶子节点就是指没有左右子叶的节点。
最多有 10^6 个结点。
【输入:第一行输入节点个数n;后面n行输入左右节点】
首先创建储存二叉树的结构体
struct node
{
int left, right;
}tree[100005];
然后存入二叉树
int i;
scanf("%d",&n);
//根节点为1
for(i=1;i<=n;i++)
{
scanf("%d %d",&tree[i].left,&tree[i].right);
}
然后搜索得到深度
void dfs(int id, int deep)
{
if (id == 0) return ;//找到叶子节点返回
if(deep>ans)
{
ans=deep;
}//更新深度
dfs(tree[id].left, deep+1);//搜索左子树
dfs(tree[id].right, deep+1);//搜索右子树
}
完整代码如下
#include <stdio.h>
struct node
{
int left, right;
}tree[100005];
//创建储存树的结构体
int n, ans;
void dfs(int id, int deep)
{
if (id == 0) return ;//找到叶子节点返回
if(deep>ans)
{
ans=deep;
}//更新深度
dfs(tree[id].left, deep+1);//搜索左子树
dfs(tree[id].right, deep+1);//搜索右子树
}
int main()
{
int i;
scanf("%d",&n);
//根节点为1
for(i=1;i<=n;i++)
{
scanf("%d %d",&tree[i].left,&tree[i].right);
}
//存入题目给出的节点
dfs(1,1);
printf("%d",ans);
}