今日题目:二叉树深度
题目描述
给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。
最多有 10^6 个结点。
输入格式
第一行一个整数 n,表示节点数。
之后 n 行,第 i 行两个整数 l、r,分别表示节点 i 的左右子节点。若 l=0 则表示无左子节点,r=0 同理。
输出格式
一个整数,表示最大节点深度。
题目分析
题目难度:⭐️
题目涉及算法:dfs,bfs,树形结构。
ps:有能力的小伙伴可以尝试优化自己的代码或者一题多解,这样能综合提升自己的算法能力
题解报告:
1.思路
这题考的是我们二叉树如何存储以及如何遍历,我们用结构体存储,然后用dfs遍历一下就好了,如果不了解二叉树可以去看一下浙江大学的数据结构。
2.代码
#include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; struct node{ int left, right; }tree[N]; int n,sum; void dfs(int x,int y) { if(x == 0) { return ; } sum = max(sum,y); dfs(tree[x].left,y+1); dfs(tree[x].right,y+1); } int main() { cin >> n; for(int i=1;i<=n;i++) { cin >> tree[i].left >> tree[i].right; } dfs(1,1); cout << sum; return 0; }