题目描述
给出一个 n 个结点的二叉树,请求出树的深度。
【样例解释】
样例对应的二叉树如图所示:
输入描述
第一行有一个整数 n (0<n≤26),表示二叉树有 n 个结点;
以下 n 行,每行第一个为一个大写字母表示结点的值,第 i+1 行的结点编号为 i。
后面为两整数,第一个表示该结点左孩子结点编号,第二个表示该结点右孩子的结点编号,如果该编号为 0 0 表示没有;(编号为 1 的结点是树的根)
输出描述;
树的深度
样例输入
7
F 2 3
C 4 5
E 0 6
A 0 0
D 7 0
G 0 0
B 0 0
样例输出
4
首先还是用一个结构体来存储这个二叉树
struct node{
char me;
int l,r;
}a[10001];
接着输入
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].me>>a[i].l>>a[i].r;
然后我们需要一个函数,来求出树的深度,用一个变量s记录深度
函数要自我调用,查找左孩子和右孩子,在查找前加一个判断,如果这是一个叶子结点,就用变量mx取
深度最大值
代码如下
#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
char me;
int l,r;
}a[100001];
int mx=0;
int tree(int bt,int s){
if(bt==0){
mx=max(mx,s-1);//注意,这里是s-1,因为如果过bt是0,他就是一个叶子结点了
return 0;
}
tree(a[bt].l,s+1);
tree(a[bt].r,s+1);
return 0;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].me>>a[i].l>>a[i].r;
tree(1,1);
cout<<mx;
return 0;
}