树的高度
题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
输入描述:
输入的第一行表示节点的个数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题的时候是多么的麻烦!