用java实现list和tree互转
时间: 2023-03-20 08:00:12 浏览: 129
List和tree相互转换
在Java中,可以使用递归算法实现将List转换为Tree,以及将Tree转换为List。
将List转换为Tree的步骤如下:
1. 创建一个根节点。
2. 遍历List中的每个元素。
3. 如果元素是叶子节点,则将它添加到根节点下。
4. 如果元素是非叶子节点,则在根节点下创建一个子节点,并将元素添加到子节点下。
5. 对于每个非叶子节点,递归执行步骤2-4,直到所有元素都被处理完。
以下是将List转换为Tree的示例代码:
```
public class TreeNode {
int val;
List<TreeNode> children;
public TreeNode(int val) {
this.val = val;
this.children = new ArrayList<>();
}
}
public TreeNode listToTree(List<Integer> list) {
TreeNode root = new TreeNode(0);
for (Integer val : list) {
addToTree(root, val);
}
return root.children.get(0);
}
public void addToTree(TreeNode node, int val) {
if (node.children.isEmpty()) {
node.children.add(new TreeNode(val));
} else {
TreeNode lastChild = node.children.get(node.children.size() - 1);
if (lastChild.val < val) {
lastChild.children.add(new TreeNode(val));
} else {
addToTree(lastChild, val);
}
}
}
```
将Tree转换为List的步骤如下:
1. 创建一个List。
2. 将根节点添加到List中。
3. 遍历根节点的子节点,将它们添加到List中。
4. 对于每个子节点,递归执行步骤3,直到所有子节点都被处理完。
以下是将Tree转换为List的示例代码:
```
public List<Integer> treeToList(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) {
return list;
}
list.add(root.val);
for (TreeNode child : root.children) {
list.addAll(treeToList(child));
}
return list;
}
```
其中,TreeNode是一个表示节点的类,包含一个值和一个子节点列表。上述代码中假设根节点的值为0,如果根节点不是叶子节点,则只有一个子节点。
阅读全文