Java リストを木構造に変換する手順と注意点
Javaで、リストをツリー構造に変換するために、ツリーノードオブジェクトを構築することができます。以下はサンプルコードです:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class TreeNode {
int val;
List<TreeNode> children;
public TreeNode(int val) {
this.val = val;
this.children = new ArrayList<>();
}
}
public class ListToTree {
public static TreeNode listToTree(List<Integer> list) {
Map<Integer, TreeNode> map = new HashMap<>();
TreeNode root = null;
for (Integer val : list) {
TreeNode node = new TreeNode(val);
map.put(val, node);
}
for (Integer val : list) {
TreeNode node = map.get(val);
if (val == 0) {
root = node;
} else {
TreeNode parent = map.get((val - 1) / 2);
parent.children.add(node);
}
}
return root;
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
TreeNode root = listToTree(list);
}
}
このコードでは、まずTreeNodeクラスを作成して、ツリーノードオブジェクトを表すようにします。これには、ノード値と子ノードリストが含まれています。 次に、与えられたリストを反復処理して、ツリーノードオブジェクトを作成し、それらをマップに格納します。ここで、キーはノード値であり、値はノードオブジェクトです。 次に、リストを再度反復処理し、ノード値の関係に基づいてツリー構造を構築し、ルートノードを返します。 最後に、listToTreeメソッドを呼び出すことで、リストをツリー構造に変換し、ルートノードを取得できます。