输入N组父子对,求父子对所组成的二叉树的高度----17年某公司的笔试题
2016-09-24 11:50
253 查看
题目的大致意思如下:
输入N组数,一组数代表一个父子对(如,0 1,0代表父节点,1代表子节点),求这N组数所组成的二叉树的高度;
例如:
输入:6
0 1
0 2
1 3
1 4
2 5
3 6
输出:4
解题思路:动态规划法,使用一个数组hight
记录每组数所能组成的二叉树的高度,初始化为全1数组,使用一个数组visited
来记录每组数的访问情况,找出最优子结构:
当visited[i]=0时,visited[i]=1,hight[i] = hight[i]+1;
然后,当matrix[j][0]=matrix[i][1]且visited[j]=0时,hight[j] = hight[i]+1,visited[j]=1;
代码如下:
输入N组数,一组数代表一个父子对(如,0 1,0代表父节点,1代表子节点),求这N组数所组成的二叉树的高度;
例如:
输入:6
0 1
0 2
1 3
1 4
2 5
3 6
输出:4
解题思路:动态规划法,使用一个数组hight
记录每组数所能组成的二叉树的高度,初始化为全1数组,使用一个数组visited
来记录每组数的访问情况,找出最优子结构:
当visited[i]=0时,visited[i]=1,hight[i] = hight[i]+1;
然后,当matrix[j][0]=matrix[i][1]且visited[j]=0时,hight[j] = hight[i]+1,visited[j]=1;
代码如下:
import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ int groups = scanner.nextInt(); int[][] matrix = new int[groups][2];for(int i=0;i<groups;i++){ for(int j=0;j<2;j++){ matrix[i][j] = scanner.nextInt(); } } //动态规划输出处理 System.out.println(maxHightHelper(matrix));
} }//动态规划 public static int maxHightHelper(int[][] matrix){ if(matrix==null||matrix.length==0) return 0; //记录当前组的高度 int[] hight = new int[matrix.length]; for(int i=0;i<hight.length;i++) hight[i] = 1; byte[] visited = new byte[matrix.length]; for(int i=0;i<matrix.length;i++){ if(visited[i]==0){ visited[i] = 1; hight[i] = hight[i]+1; } for(int j=i+1;j<matrix.length;j++){ if(matrix[j][0]==matrix[i][1]&&visited[j]==0){ visited[j] = 1; hight[j] = hight[i] +1; } } } //找最大的高度 int max = 0; for(int i=0;i<hight.length;i++){ if(max<hight[i]) max = hight[i]; } return max; } }
相关文章推荐
- c++现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- 某公司面试题:最长顺子;输入很多个整数(1<=数值<=13),返回其中可能组成的 最长的一个顺子(顺子中数的个数代表顺的长度); 其中数字1也可以当作14用
- 【C语言】【面试题】【笔试题】写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
- 由整数对(父节点和子节点的关系)组成的二叉树的高度问题
- 华为上机笔试之通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
- 2017小米服务端开发笔试(求二叉树高度)
- 【C语言】【面试题】【笔试题】写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
- 用递归方法对二叉树进行层次遍历(某公司实习生招聘笔试试题)
- 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- 用i个点组成高度为不超过j的二叉树的数量。
- 【IT笔试面试题整理】有序数组生成最小高度二叉树
- 今天开始学Java 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- 【IT笔试面试题整理】给定二叉树,给每层生成一个链表
- 2013年9月华为成都笔试题 输入字符串计算数值(c语言)
- C++计算二叉树的节点数和高度
- 大数阶乘(某公司笔试题)
- 文本输入框自适应高度
- n节点组成二叉树的个数
- 文本域随着输入而增加高度
- 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。