树的高度

题目描述

现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

输入描述:

输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号

输出描述:

输出树的高度,为一个整数
示例1

输入

5
0 1
0 2
1 3
1 4

输出

3

 

 1 var readline = require('readline');
 2 
 3 rl = readline.createInterface({
 4     input: process.stdin,
 5     output: process.stdout
 6 });
 7 
 8 var inputs = [];
 9 var num = 0;
10 rl.on('line', function(data) {
11     if(num == 0){
12         num = Number(data.trim());
13         if (num == 1) {
14             console.log(1);
15         }
16         num = num - 1;
17     } else {
18         inputs.push(data.trim());
19         if (num == inputs.length) {
20             // 处理
21             var result = deal(inputs);
22 
23             // 输出结果
24             console.log(result);
25 
26             // 清0
27             inputs.length = 0;  //不可改动
28             num = 0;    //不可改动
29         }
30     }
31 });
32 
33 
34 function deal(inputs) {
35     var result = new Array(1000).fill(0);
36     var cnt = new Array(1000).fill(0);
37     var cut = [];
38     for (var i = 0; i < num; i++) {    
39         var arr = inputs[i].split(' ');
40         var p = arr[0];
41         var ch = arr[1];
42         cnt[p]++;
43         if (cnt[p] > 2) {
44             result[ch] = -1000;
45             continue;
46         }
47         result[ch] = result[p] + 1;
48     }
49     result = Math.max(...result);
50     return result + 1;
51 }

前面一坨主要是node的输入,功能实现在deal函数中。

思路: 子节点的高度等于父节点高度 + 1;

坑: 这道题题目说的是二叉树,但是测试用例里面有多叉,要手动过滤多叉(我这里用的纯暴力,没有过滤,只是把高度赋值为一个很小的值 -1000)。提交多次之后发现一组数据过不了,然后翻看大佬们的评论,才发现测试里面有多叉。

emmm.....深刻体会到node.js的输入在A题的时候是多么的麻烦!

posted @ 2018-03-27 15:56  修-夏-  阅读(240)  评论(0编辑  收藏  举报