这个面试问题有多清楚?[已关闭]
我们正在面试一个高级Java开发角色,我们要求完成这个问题的所有三个人都给了我们同样不正确的答案。这个问题是在面试之前完成的,所以他们有很多时间。他们的解决方案似乎是按 parentId 和 childId 对输入进行排序,而不是创建一个树,然后从输入中遍历树以找到正确的顺序。问题是不是不够清楚?
问题:
以下是Java开发人员角色的简单技能和演示测试,必须在电话面试之前完成。
必填:
JUnit 测试
NodeSorter 接口的实现
问题:
我们有一个 Java 对象,如下所示:
public class Node {
public int id;
public Integer parentId;
public Node(int id, Integer parentId) {
this.id = id;
this.parentId = parentId;
}
}
例如,以下节点列表可能以图形方式显示为:
节点 (id: 1, parentId: null), Node (id: 2, parentId: 1), Node(id: 3, parentId: 1), Node(id: 4, parentId: 2), Node(id: 5, parentId: 3)
Node (id: 1)
/ \
/ \
/ \
/ \
Node (id: 2) Node (id : 3)
/ \
/ \
/ \
/ \
Node (id: 4) Node (id : 5)
假设:
始终至少有一个节点
将有一个且只有一个节点具有空父 Id
每个节点都有一个有效的 parentId,但具有空 parentId 的节点除外
要求:
- 编写一个实现以下接口的类,该接口将接收节点列表,并从上到下对它们进行排序(树中较高的节点必须在树中较低的节点之前。例如。树顶部的节点 1 必须位于树底部的节点 4 之前)。同一级别的节点将按其 id 的顺序排列,因此在上图中,id=2 的节点将显示在 id=3 的节点之前。
接口:
public interface NodeSorter {
public List<Node> sort(List<Node> unSortedNodes);
}
测试数据:
测试用例 1:
输入图:
Node (id: 1)
/ \
/ \
/ \
/ \
Node (id: 2) Node (id : 3)
/ \
/ \
/ \
/ \
Node (id: 4) Node (id : 5)
输入: 节点 (id: 2, parentId: 1), Node(id: 4, parentId: 2), Node (id: 1, parentId: null), Node(id: 3, parentId: 1), Node(id: 5, parentId: 3)
输出:节点 (id: 1, parentId: null), Node (id: 2, parentId: 1), Node(id: 3, parentId: 1), Node(id: 4, parentId: 2), Node(id: 5, parentId: 3)
测试用例 2:
输入图:
Node (id: 1)
/ \
/ \
/ \
/ \
Node (id: 5) Node (id : 2)
/ \
/ \
/ \
/ \
Node (id: 4) Node (id : 3)
输入: 节点 (id: 5, parentId: 1), Node(id: 4, parentId: 5), Node (id: 1, parentId: null), Node(id: 3, parentId: 2), Node(id: 2, parentId: 1)
输出:节点 (id: 1, parentId: null), Node (id: 2, parentId: 1), Node(id: 5, parentId: 1), Node(id: 3, parentId: 2), Node(id: 4, parentId: 5)