import cn.leekari.base.TreeNode;

import java.util.ArrayList;
import java.util.List;

/**
 * @author litao
 * @date 2020/10/14 16:41
 * @description
 */

/**
 * 二叉树的展示,先序、中序、后序
 */
public class ShowTree {

    /**
     * 先序
     * @param root
     * @return
     */
    public static List<Integer> beforeList(TreeNode root){
        if (root == null) {
            return new ArrayList<>();
        }
        List<Integer> beforeList = new ArrayList<>();
        beforeList.add(root.val);
        if(root.left != null){
            beforeList.addAll(beforeList(root.left));
        }
        if(root.right != null){
            beforeList.addAll(beforeList(root.right));
        }
        return beforeList;
    }

    /**
     * 中序
     * @param root
     * @return
     */
    public List<Integer> mediumList(TreeNode root){
        if (root == null) {
            return new ArrayList<>();
        }
        List<Integer> mediumList = new ArrayList<>();
        if(root.left != null){
            mediumList.addAll(mediumList(root.left));
        }
        mediumList.add(root.val);
        if(root.right != null){
            mediumList.addAll(mediumList(root.right));
        }
        return mediumList;
    }

    /**
     * 后序
     * @param root
     * @return
     */
    public List<Integer> lastList(TreeNode root){
        if (root == null) {
            return new ArrayList<>();
        }
        List<Integer> lastList = new ArrayList<>();
        if(root.left != null){
            lastList.addAll(lastList(root.left));
        }

        if(root.right != null){
            lastList.addAll(lastList(root.right));
        }
        lastList.add(root.val);
        return lastList;
    }


    public static void main(String[] args) {
        TreeNode treeNode = new TreeNode();
        treeNode.val = 1;
        treeNode.left = new TreeNode();
        treeNode.left.val = 2;
        treeNode.right = new TreeNode();
        treeNode.right.val = 3;
        treeNode.left.left = new TreeNode();
        treeNode.left.left.val = 4;
        treeNode.left.right = new TreeNode();
        treeNode.left.right.val = 5;
        System.out.println(beforeList(treeNode));
    }
}