package NTree;
import java.util.ArrayList;
import java.util.List;
/**
* N叉树的前后序遍历和最大深度
*/
public class Ntree {
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val,List<Node> _children) {
val = _val;
children = _children;
}
}
public int maxDepth(Node root) {
if (root == null) {
return 0;
} else {
int max = 0;
for (int i = 0; i < root.children.size(); i++) { // 遍历子结点,找出子结点中的最大深度
max = Math.max(max, maxDepth(root.children.get(i)));
}
return 1+max;
}
}
List<Integer> pre_list = new ArrayList<>();
public List<Integer> preorder(Node root) {
if (root == null) {
return pre_list;
}
pre_list.add(root.val);
for (Node node : root.children) {
preorder(node);
}
return pre_list;
}
List<Integer> post_list = new ArrayList<>();
public List<Integer> postorder(Node root) {
if (root == null) {
return post_list;
}
for (Node node : root.children) {
postorder(node);//起到遍历到最后一个元素的作用,存入在最后做
}
post_list.add(root.val);//遍历到最后一个时候,就会存了,不需要每次都存节点所有子节点,如上种做法那样
return post_list;
}
}