题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
输入描述:
输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
输出描述:
输出树的高度,为一个整数
示例1
输入
50 10 21 31 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 // 清027 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题的时候是多么的麻烦!