P4913 【深基16.例3】二叉树深度//二叉树//自用学习笔记
# 【深基16.例3】二叉树深度
## 题目描述
有一个 $n(n \le 10^6)$ 个结点的二叉树。给出每个结点的两个子结点编号(均不超过 $n$),建立一棵二叉树(根节点的编号为 $1$),如果是叶子结点,则输入 `0 0`。
建好这棵二叉树之后,请求出它的深度。二叉树的**深度**是指从根节点到叶子结点时,最多经过了几层。
## 输入格式
第一行一个整数 $n$,表示结点数。
之后 $n$ 行,第 $i$ 行两个整数 $l$、$r$,分别表示结点 $i$ 的左右子结点编号。若 $l=0$ 则表示无左子结点,$r=0$ 同理。
## 输出格式
一个整数,表示最大结点深度。
## 样例 #1
### 样例输入 #1
```
7
2 7
3 6
4 5
0 0
0 0
0 0
0 0
```
### 样例输出 #1
```
4
```
#include <iostream>
using namespace std;
const int MAX = 1e6 + 99;//定义最大值 常量指针不可修改值
struct node//结构体定义节点
{
int left;
int right;
};
node list[MAX];//定义一个二叉树
int n;
int ans = 0;
void dfs(int id,int deep)//查找函数,输入node的id和深度,循环,遍历
{
if(id == 0)//如果为叶子结点则结束(某次)函数
{
return;
}
ans = max(ans,deep);
dfs(list[id].left,deep+1);//每次遍历后深度+1
dfs(list[id].right,deep+1);
}
int main()
{
cin >> n;
for(int i = 1 ; i <= n ; i++)
{
cin >> list[i].left >> list[i].right;
}
dfs(1,1);//从根节点和深度1开始调用函数
cout << ans;
return 0;
}