根据父子关系建立二叉树
来源:互联网 发布:淘宝关注的主播在哪里 编辑:程序博客网 时间:2024/05/17 04:04
题目:
- 给定这棵树上所有的父子关系,求这棵树的高度。
样例:
5
0 1
0 2
1 3
1 4
思路:
- 将所有的节点保存在 HashMap 结构中,并根据节点之间的关系,建立二叉树。
代码:
import java.util.*;//树的节点class Node{ int val; Node parent; Node left; Node right; Node(int val){ this.val = val; }}public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNextInt()){ int n = in.nextInt(); if(n==0 || n==1){ System.out.println(n); continue; } int[][] nums = new int[n-1][2]; for(int i=0; i<n-1; i++){ Integer i1 = in.nextInt(); Integer i2 = in.nextInt(); nums[i][0] = i1; nums[i][1] = i2; } //=========================建立树的过程========================= //将所有的节点保存在 Map 结构里面 HashMap<Integer, Node> map = new HashMap<Integer, Node>(); //遍历关系对,建立节点之间的联系 for(int i=0; i<n-1; i++){ //如果原来没有该节点,则建立新节点 if(!map.containsKey(nums[i][0])){ Node node = new Node(nums[i][0]); map.put(nums[i][0], node); } if(!map.containsKey(nums[i][1])){ Node node = new Node(nums[i][1]); map.put(nums[i][1], node); } //建立节点之间的联系 Node node0 = map.get(nums[i][0]); Node node1 = map.get(nums[i][1]); node1.parent = node0; //注意此处要保存父节点 if(node0.left==null) node0.left = node1; else node0.right = node1; } //找出根节点:没有父节点的,即为根节点,得到建立后的树 Node head = null; for(int i=0; i<n; i++){ Node tempnode = map.get(i); if(tempnode.parent == null){ head = tempnode; break; } } //=========================树建立完成========================= //根据树,采用递归算法,得到树的高度 int result = MyFunction(head); System.out.println(result); } } //计算树的高度 public static int MyFunction(Node head){ if(head==null) return 0; if(head.left == null) return MyFunction(head.right)+1; else if(head.right == null) return MyFunction(head.left)+1; else return Math.max(MyFunction(head.left), MyFunction(head.right))+1; }}
参考:
题目来源: http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3329&konwledgeId=155
0 0
- 根据父子关系建立二叉树
- viewController 建立父子关系
- SQL 遍历父子关系表(二叉树)
- 根据前序中序遍历建立二叉树
- 根据二元树后序序列建立二叉树
- 如何根据两个遍历建立二叉树
- java根据层次遍历建立二叉树
- Maven建立父子关系项目工程,建立依赖关系结构
- iOS 控制器父子关系的建立原则
- 控制器父子关系的建立原则
- 根据二叉树的先序遍历建立二叉树
- 根据二叉树前序/中序结果,建立二叉树
- 【二叉树】根据后序表达式建立表达式树
- 根据前序遍历和后续遍历建立二叉树
- 根据前序和中序建立二叉树
- 根据先序遍历建立一个二叉树
- 根据后序和中序建立二叉树
- SQL 遍历父子关系表(二叉树)获得所有子节点
- Java集合之ArrayList
- windows 常用 cmd 命令
- GIT配置SSH key
- Leetcode -- 36. Valid Sudoku
- 15-多线程互斥和同步
- 根据父子关系建立二叉树
- list容器的遍历删除
- 继承(Inheritance)与复合(Composition)关系下的构造与析构
- 2017,回来了~
- Shell 练习题 21—30,内附答案
- 关于如何单独失能STM32 TIM通道的方法
- 设计模式-3-建造者模式
- Bagging – building an ensemble of classifers from bootstrap samples
- C++之拷贝构造与拷贝赋值