关闭
当前位置:首页 - 国际国内新闻 - 正文

晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡

admin 2019-05-05 166°c

前语

这篇文章承接了之前的文章,都是关于面试的内容。作者是我的一个学弟,现在是大三,所以他的文章偏重于实习/校招。因此有相关阅历的小伙伴假如想知道他,能够后台私信我。

这是他的其他一些文章:

面试阿里前,问问自己能不能手写这道题

面试被问到Spring IOC、AOP和动态署理,用这篇文章怼曩昔

面试被问到Java虚拟机,用这篇文章怼曩昔

正文

标题要求:deadline

现在咱们具有全国的省、市、县、镇的行政信息,比方 浙江省 -> 杭州市 -> 西湖区 --> xx大街,请将这些信息构建成一棵树戴朴雷,根节点为全国,叶子节点为镇。

我的误解:

刚开始我并没有理解题意,走了弯路,仅仅简略的构建了一个多叉树。代码如下:

import java.util.ArrayList;
import java.util.List;
public class SiteTree {
public final static String COUNTRY = "国";
public final static String PROVINCE = "省";
public final static String CITY = "市";
private static class Node {
private String level; //国》省》市》县》镇
private String name; //例如:山东省、济南市等详细地名
private List child; //下一级节点列表
private Node(String level, String name) {
this.level = level;
this.name = name;
}
//Getter Setter
}
public static void main(String[] args) {
//声明一个根节点
Node GUO = new Node(SiteTree.COUNTRY, "我国");
//山东省下的市级单位
Node JINAN = new Node(SiteTree.CITY, "济南市");
Node JINING = new Node(SiteTree.CITY, "济宁市");
//将市级节点放入山东省级节点下
Node QLU = new Node(SiteTree.PROVINCE, "山东省");
SiteTree.add(QLU, JINAN, JINING);
//将省级节点放入国级节点下
Node ZJS = new Node(SiteTree.PROVINCE, "浙江省");
SiteTree.add(GUO, QLU, ZJS);
//不再举例...
System.out.println(GUO);
}
public static void add(Node parent, Node... child) {
List childs = new ArrayList<>();
for (int i = 0; i < child.length; i++) {
ch晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡ilds.add(child[西安音乐学院i]晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡);
}
parent.setChild(childs);
}
}

当面试官看到代码后,提示我:你需求完成一个通用的办法。我没太理解,面试官又说:首要调查你对递归的运用。

看到这儿,我遽然理解了面试官的目的:运用递归去构建N叉树

摆在我面前的一个问题是,我该怎么去读取数据源,数据源捧杀贮存的方式是什么?是文本文件仍是数据库?

文本文件说实话,不太好完成,而且不标准,正常逻辑数据应该贮存在数据库。

可是我现在总不能去装个数据库吧?再写DAO层查询接口?这不实际。

没办法华为p7手机,只能自己简略模仿下数据库操作了!

表结构都是一行一行的数据,那就用List。每行数据(节点)不能只要主键,还要有父节点的外键,由于标题要求也给出了数据是具有指向联系的 。

怎么完成数据的查询呢?当然是用St我国娃娃ream,最简略。

剖析到这儿,完好的代码现已呼之欲出,请看大屏幕 ↘

import java.util.Ar大型犬rayList;
import java.util.List;
import java.util.stream.Collectors;
public class SiteTree {
public final static String COUNTRY = "国";
public final static String PROVINCE = "省";
public final static String CITY = "市";
private static List list = initData();
//结合数据库比较好实晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡现,所以简略完成下!
private static class Node{
private int cid; //节点ID
private int pid; //父节点ID
private String level; //国》省》市》县》镇
private String name; //例如:山东省、济南市等详细地名
private List child = new ArrayList<>(); //下一级节点列表
public Node(int cid, int pid, String level, String name) {
this.cid = cid;
this.pid = pid;
this.level = level;
this.name = name;
}
public int getCid() {
return cid;
}
public int getPid() {
return pid;
}
public String getName() {
return name;
}
public List getChild() {
return child;
}
@Override
public String toString() {
return "Node{" +
"cid=" + cid +
", pid=" + pid +
", level='" + level + '\'' +
", name='" + name + '\'' +
", child=" + child +
'}';
}
}
/**
* 初始化数桃子影视据库
* @return
*/
private static List initData() {
//声明一个根节点
Node GUO = new Node(1,0,SiteTree.COUNTRY,"我国");
//将市级节点放入山东省级节点下
Node QLU = new Node(4,1,SiteTree.PROVINCE, "山东省");
//将省级节点放入国级节稻盛和夫点下
Node ZJS =新天启大明 ne梨涡w Node(5,1,SiteTree.PROVINCE,"浙江省");
//山东省下的市级单位
Node JINAN = new Node(2,4,SiteTree.CITY,"济南市");
Node JINING = new Node(3,4,SiteTree.CITY,"济宁市");
//简略数据库完成
List list = new ArrayList<>();
list.add(GUO);
list.add(JINAN);
list.add(JINING);
list.add(QLcontroveryU)晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡;
list.add(ZJS);
return list;
}
public static void mai晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡n(String[] args){
System.out.pr母乳intln(child(1));
}
private static Node child(int cid) {
//获取节点
Node node = getTreeNode(cid);
//获取子节点
List childNodes = getChildNode(cid);
//遍历子节点
for (Node child : childNodes){
Node n = child(child.getCid());//递归
node姐.getChild().add(n);
}王鸥老公
return node;
}
private static Node getTreeNode(int cid) {
return list.stream().filter(node -> {
if (node.getCid() == cid) {
return true;
}
return false;
}).findFirst().get();
}
private static List getChildNode(int pid) {
return list.stream().filter四种形状(node -> {
if (node.getPid() 晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡== pid) {
return true;
}
return false;
}).collect(Collectors.t南通市oList());
}
}

打印输出晋城天气预报,面试阿里前,问问自己能不能手写这道题:递归构建N叉树,林保怡:

Node{cid=1, pid=0, level='国', name='我国', child=[
Node{cid=4, pid=1, level='省', name='山东省', child=[
Node{cid=2, pid=4, level='市', name='济南市', child=[]},
Node{cid=3, pid=4, level='市', name='济宁市', chjbl音响ild=[]}]},
Node{cid=5, pid=1, level='省', 常艳name='浙江省', child=[]}]}

这是我的回答,假如你有更好的回答,欢迎谈论共享!

admin 14文章 0评论 主页

相关文章

  用户登录