Java 一维数组转换 N 叉树结构
最近在 LeetCode 刷题,发现遇到不少 N 叉树类型的题目,题目会定义好树节点 Node 的数据结构。
Node
Node 的数据结构如下:
public class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
在题目的示例中,N 叉树的输入都是一个一维数组,表示这个 N 叉树结构。
例如:
输入:root = [1,null,3,2,4,null,5,6]
表示的 N 叉树为:
因此在 IDE 里面编码调试时,需要一个转化方法方便自己编写并运行测试用例。
转换 N 叉树
一维数组转换 N 叉树结构:
public class NodeUtil {
/**
* LeetCode 上的一维数组转 N 叉树
* @param array
* @return
*/
public static Node arrayToNode(Integer[] array) {
if (array.length == 0) {
return null;
}
Node root = new Node(array[0]),midNode=root;
List<Node> nodeList = new ArrayList<>();
int listIndex = 0;
for (int i = 1; i < array.length; i++) {
if (array[i] == null) {
if (listIndex+1<nodeList.size()){
midNode = nodeList.get(listIndex);
listIndex++;
} else {
nodeList.clear();
}
continue;
}
if (midNode.children==null){
midNode.children = new ArrayList<>();
}
Node node = new Node(array[i]);
nodeList.add(node);
midNode.children.add(node);
}
return root;
}
}
使用方式:
Node node = NodeUtil.arrayToNode(new Integer[]{1,null,3,2,4,null,5,6});
测试用例
表示 N 叉树
以下 N 叉树:
可以表示为:
Node node = NodeUtil.arrayToNode(new Integer[]{1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14});
相关文章