2017校招 美团笔试题 编程题 层次遍历多叉树
来源:互联网 发布:检测图片中的文字算法 编辑:程序博客网 时间:2024/06/15 20:26
题目:美团笔试题 编程题 层次遍历多叉树
给定一棵多叉树,每个节点保存一个int类型数字且节点数字不重复,
要求从上到下按层次打印每个节点的数字,每个层次按从左到右的顺序。
要求:
(1)实现 一颗多叉树
(2)根据自定义输入 ,构造多叉树
(3)从左到右按层输出多叉树
输入包含多行,每行有空格隔开的多个数字,第一个数字为某一个父节点的值,
后面N个数字为父节点的所有子节点的值,按从左到右的顺序排序,所有节点的值为整数,取值范围[0,100]。
如:
5 2 3
2 6 7 8
(5为根节点,有两个子节点;2为5的第一个子节点,包含三个子节点)
输出包含一行,用空格隔开:
5 2 3 6 7 8
要求从上到下按层次打印每个节点的数字,每个层次按从左到右的顺序。
要求:
(1)实现 一颗多叉树
(2)根据自定义输入 ,构造多叉树
(3)从左到右按层输出多叉树
输入包含多行,每行有空格隔开的多个数字,第一个数字为某一个父节点的值,
后面N个数字为父节点的所有子节点的值,按从左到右的顺序排序,所有节点的值为整数,取值范围[0,100]。
如:
5 2 3
2 6 7 8
(5为根节点,有两个子节点;2为5的第一个子节点,包含三个子节点)
输出包含一行,用空格隔开:
5 2 3 6 7 8
注意:在本地测试用Scanner的时候,要先给出每个案例有多少行数据,
在下面的测试代码中打开注释的即可,输入格式为:
2
5 2 3
2 6 7 8
Java代码实现
import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;/** * 多叉树的创建与遍历 * * @author fangzheng * @date 2016年9月11日 下午4:19:58 */public class MultiTree {// 测试代码public static void main(String[] args) {/*Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {MultiNode root = null;boolean isFirst = true;//注意:此处加了一个输入参数:一个case有多少行int n = Integer.valueOf(scanner.nextLine());for (int j = 0; j < n; j++) {String input = scanner.nextLine();String[] arr = input.split(" ");int[] items = new int[arr.length];for (int i = 0; i < arr.length; i++) {items[i] = Integer.valueOf(arr[i]);}if (isFirst) {root = new MultiNode(items[0], null);isFirst = false;}construcMultiTree(root, items);}layerTran(root);}scanner.close();*/ //上面注释的是从命令行输入所得数据,下面是直接测试 MultiNode root = new MultiNode(5, null); construcMultiTree(root, new int[] { 5, 2, 3 }); construcMultiTree(root, new int[] { 2, 6, 7, 8}); layerTran(root);}/** * 层次遍历多叉树 * * @param root */public static void layerTran(MultiNode root) {if (root == null) {return;}Queue<MultiNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {MultiNode node = queue.poll();System.out.print(node.val + " ");if (node.nodeList != null) {for (MultiNode temp : node.nodeList) {queue.add(temp);}}}}/** * 构造多叉树 * * @param root * @param arr */public static void construcMultiTree(MultiNode root, int[] arr) {// arr[0] 是子结点,后面是其孩子结点LinkedList<MultiNode> childList = new LinkedList<>();for (int i = 1; i < arr.length; i++) {MultiNode childNode = new MultiNode(arr[i], null);childList.add(childNode);}// 遍历root,找到结点nodefindNode(arr[0], root).nodeList = childList;}/** * 找到值为 val 的节点 * * @param val * @param root * @return */public static MultiNode findNode(int val, MultiNode root) {if (val == root.val) {return root;}// System.out.println("root"+root);MultiNode temp = root;MultiNode resMultiNode = null;if (root.nodeList != null) {for (MultiNode tempNode : root.nodeList) {resMultiNode = findNode(val, tempNode);if (resMultiNode != null) {break;}}}return resMultiNode;}}/** * 多叉树的节点类 * */class MultiNode {int val;LinkedList<MultiNode> nodeList;public MultiNode(int val, LinkedList<MultiNode> nodeList) {this.val = val;this.nodeList = nodeList;}@Overridepublic String toString() {return "MultiNode [val=" + val + ", nodeList=" + nodeList + "]";}}
1 0
- 2017校招 美团笔试题 编程题 层次遍历多叉树
- 美团2015校招研发笔试题--编程
- 美团点评2017秋招笔试编程题
- 美团2014校招笔试题
- 美团点评校招笔试题
- 美团2017秋招编程题
- 美团点评2017秋招笔试真题A
- 美团2017校招客户端方向编程题
- 美团校招笔试题
- 美团点评2017秋招笔试编程
- 2017美团点评秋招笔试编程
- 美图2018校招前端笔试编程题数组去重
- 美团点评秋招编程题
- 美团点评 2017春招编程题
- 美团2017校招笔试--取红包问题
- 【2014校招】美团笔试&面试
- 美团2018校招笔试
- 美团2017秋招笔试-大富翁
- okHttp使用教程
- 4-求并联电阻之和
- CSS常见问题积累
- Jquery学习总结(5)——jQuery选择器
- Ubuntu16.04Kylin使用体验
- 2017校招 美团笔试题 编程题 层次遍历多叉树
- Linux strace命令
- macOS下安装homebrew + pyenv + pyenv-virtualenv
- 微信JSAPI支付接口GET不到参数问题解决
- centos7+cuda8.0编译tensorflow_r0.10遇到的问题和解决方法
- 数据库连接池技术的原理和实现
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 - C A Simple Job (模拟)(multiset)
- 解决Gradle DSL method not found: ‘android()’
- JavaDoc生成API详解