题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
输入描述:
输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成, 下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
输出描述:
输出树的高度,为一个整数
5 0 1 0 2 1 3 1 4
3
#include <iostream> #include <cstdio> #include<cstring> #include<iostream> using namespace std; int max(int a, int b) { return (a > b ? a:b); } int FindHeight(int root_flag, int left[], int right[]){ if(root_flag == -1) {return 0;} return max(FindHeight(left[root_flag], left, right), FindHeight(right[root_flag], left, right)) + 1; } int main(){ int n_nodes ; cin >> n_nodes; n_nodes = n_nodes-1; int root[1000],left[1000],right[1000]; memset(left,-1,sizeof(left)); memset(right,-1,sizeof(right)); memset(root,-1,sizeof(root)); int root_flag; while (n_nodes--){ int a,b; cin>> a >> b; if (left[a]!= -1){ right[a]=b; }else{ left[a]=b; } root[b]=0; } for (int i=0; i<1000; i++){ if (root[i]== -1){ root_flag=i; break; } } cout<< FindHeight(root_flag, left, right)+1; return 0; }