N叉树的前后序遍历和最大深度

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;
    }
}

 

posted @ 2018-11-20 11:35  会偷袭的猫  阅读(229)  评论(0编辑  收藏  举报