题目地址:
https://leetcode.com/problems/clone-n-ary-tree/
给定一棵 N N N叉树,要求对其深拷贝。
思路是DFS,如果树空则返回null,否则先拷贝树根,然后对其每个孩子进行深拷贝,加入拷贝出来的树根的孩子中去。代码如下:
import java.util.ArrayList;
import java.util.List;
public class Solution {
public Node cloneTree(Node root) {
return dfs(root);
}
private Node dfs(Node root) {
// 树空则返回null
if (root == null) {
return null;
}
// 拷贝树根
Node res = new Node(root.val);
// 遍历原树的孩子节点,分别拷贝之后加入新拷贝出来的树根的孩子里去
for (Node child : root.children) {
res.children.add(dfs(child));
}
// 返回新拷贝的树根
return res;
}
}
class Node {
public int val;
public List<Node> children;
public Node() {
children = new ArrayList<>();
}
public Node(int _val) {
val = _val;
children = new ArrayList<>();
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)(递归栈深度)。