CCF PTA 2023年5月C++天空之城的树

【问题描述】

拉姆达人在修建天空之城时,主要是依赖巨大的飞行石去维持悬空状态,依赖强壮的大树去作为建筑 物的框架,假设大树是一棵有 n(n≤10 3)个结点的二叉树。给出每个结点的两个子结点编号(均不超 过 n),建立一棵二叉树(根节点的编号为 1),如果是叶子结点,则输入 0 0。 建好这棵二叉树之后,请帮拉姆达设计师求出它的深度。二叉树的深度是指从根节点到叶子结点时, 最多经过了几层。

【输入描述】

第一行一个整数 n,表示结点数。 之后 n 行,第 i 行两个整数 l、r,分别表示结点 i 的左右子结点编号。若 l=0 则表示无左子结点, r=0 同理。

【输出描述】

一个整数,表示最大结点深度。

【输入样例】

7

2 7

3 6

4 5

0 0

0 0

0 0

0 0

【题解】

本题关键点:用递归的方式求二叉树的深度。代码如下。

cpp 复制代码
#include <iostream>
using namespace std;
struct tree{
	int left;
	int right;
};
tree all[1010];
int depth=0;
//root当前的根,d当前的深度 
void dep(int root,int d){
	if(root==0)
		return;
	depth=max(depth,d);
	dep(all[root].left,d+1);
	dep(all[root].right,d+1);
}
int main(){
	int n;	
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>all[i].left>>all[i].right;		
	}	
	dep(1,1);
	cout<<depth<<endl;
	return 0;
}
相关推荐
Cx330❀4 分钟前
【优选算法必刷100题】第43题(模拟):数青蛙
c++·算法·leetcode·面试
杜子不疼.4 分钟前
【LeetCode30_滑动窗口 + 哈希表】:三招搞定“串联所有单词的子串”
数据结构·算法·哈希算法
闻缺陷则喜何志丹5 分钟前
【C++动态规划 状压dp】1879. 两个数组最小的异或值之和|2145
c++·算法·动态规划·力扣·数组·最小·动态规范
艾莉丝努力练剑10 分钟前
【优选算法必刷100题:专题五】(位运算算法)第033~38题:判断字符是否唯一、丢失的数字、两整数之和、只出现一次的数字 II、消失的两个数字
java·大数据·运维·c++·人工智能·算法·位运算
光羽隹衡10 分钟前
机器学习——DBSCAN算法
人工智能·算法·机器学习
vyuvyucd10 分钟前
Java数组与Arrays类实战指南
数据结构·算法
csuzhucong10 分钟前
七彩鹦鹉螺魔方
算法
逝川长叹10 分钟前
利用 SSI-COV 算法自动识别线状结构在环境振动下的模态参数研究(Matlab代码实现)
前端·算法·支持向量机·matlab
山上三树10 分钟前
详细介绍 C 语言中的匿名结构体
c语言·开发语言·算法
EXtreme3511 分钟前
【数据结构】彻底搞懂二叉树:四种遍历逻辑、经典OJ题与递归性能全解析
c语言·数据结构·算法·二叉树·递归