现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
2017-09-18 15:25
405 查看
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
输入描述:
输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
输出描述:
输出树的高度,为一个整数
示例1
输入
5
0 1
0 2
1 3
1 4
输出
3
一段时间没写java了,竟然连建树都不会了。。。
这个题并不难,大体思路是:对给定的一棵树root,Height=max(root.left,root.right)+1。
感觉困难的就是输入困难一点
输入描述:
输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号
输出描述:
输出树的高度,为一个整数
示例1
输入
5
0 1
0 2
1 3
1 4
输出
3
一段时间没写java了,竟然连建树都不会了。。。
这个题并不难,大体思路是:对给定的一棵树root,Height=max(root.left,root.right)+1。
感觉困难的就是输入困难一点
import java.util.Scanner; import java.util.HashMap; public class Main { public static class TreeNode{ TreeNode left=null; TreeNode right=null; int value; public TreeNode(int v){ this.value=v; } } public int Height(TreeNode root){ if(root==null){ return 0; } int left=0,right=0; if(root.left!=null){ left=Height(root.left); } if(root.right!=null){ right=Height(root.right); } return ((left>=right)?left:right)+1; } public static void main(String[] args) { Main m=new Main(); Scanner s=new Scanner(System.in); int num=s.nextInt(); int rootval=s.nextInt(); int rootfirst=s.nextInt(); TreeNode root=new TreeNode(rootval); TreeNode rootLeft=new TreeNode(rootfirst); root.left=rootLeft; HashMap<Integer,TreeNode> nodeMap=new HashMap<Integer,TreeNode>(); nodeMap.put(rootval, root); nodeMap.put(rootfirst,rootLeft); for(int i=0;i<num-2;i++){ int parentval=s.nextInt(); int childval=s.nextInt(); TreeNode parent=nodeMap.get(parentval); TreeNode child=new TreeNode(childval); if(parent!=null){ if(parent.left==null){ parent.left=child; }else if(parent.right==null){ parent.right=child; } }else{ parent=new TreeNode(parentval); parent.left=child; } nodeMap.put(parentval, parent); nodeMap.put(childval, child); } System.out.println(m.Height(root)); s.close(); } }
相关文章推荐
- 今天开始学Java 现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- c++现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
- SQL 遍历父子关系表(二叉树)获得所有子节点
- SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点(转)
- 数据库 SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点
- SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点(转)
- 数据库 SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点
- SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点
- SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点(转)
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应
- 给定一棵二叉树,二叉树每个节点的值唯一,从根节点开始找出路径上的所有节点的节点值之和等于规定值的路径
- 7-3 计算一棵给定二叉树的所有节点个数
- 7-4 输出一棵给定二叉树的所有叶子节点
- 给定一个数字字符串,返回数字可能表示的所有可能的字母组合。数字与字母的对应关系和手机按键对应。
- 从一给定的顺序表L中删除下标i--j(i<=j,包括i、j)的所有元素,假定i、j都是合法的
- 使用递归算法从给定树上任意几个节点将这几个节点的所有下级 和 上级返回出来
- 给一个二叉树,每个节点都是正或负整数,如何找到一个子树,它所有节点的和最大?
- 小明买了一些彩色的气球用绳子串在一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一串5个颜色各不相同的气球串。但小明希望得到不出现重复颜色的气球串,那么现在小明需要将这个气球串剪成多个较短的气球串,小明一共有多少种剪法?如原气球串12345的一种是剪法是剪成12和345两个气球串。
- (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)
- PHP 输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径