算法思路

二叉树遍历最简单的实现方法就是使用递归的写法了,比如先序遍历:先打印根节点,然后是左子树,接着右子树;题目要求将二叉树的三种遍历结果以数组形式返回,那么我们先可以创建三个链表分别保存先序、中序和后续的遍历结果,然后将结果合并成二位数组返回即可;

算法实现

public class Solution {
    private static final List<Integer> preOrderList = new ArrayList<>();
    private static final List<Integer> inOrderList = new ArrayList<>();
    private static final List<Integer> postOrderList = new ArrayList<>();

    /**
     * 
     * @param root TreeNode类 the root of binary tree
     * @return int整型二维数组
     */
    public int[][] threeOrders (TreeNode root) {
        preOrder(root);
        inOrder(root);
        postOrder(root);
        return new int[][] {
            preOrderList.stream().mapToInt(Integer::intValue).toArray(),
            inOrderList.stream().mapToInt(Integer::intValue).toArray(),
            postOrderList.stream().mapToInt(Integer::intValue).toArray()
        };
    }

    // 先序遍历
    private void preOrder(TreeNode root) {
        if (root != null) {
            preOrderList.add(root.val);
            preOrder(root.left);
            preOrder(root.right);
        }
    }

    // 中序遍历
    private void inOrder(TreeNode root) {
        if (root != null) {
            inOrder(root.left);
            inOrderList.add(root.val);
            inOrder(root.right);
        }
    }

    // 后续遍历
    private void postOrder(TreeNode root) {
        if (root != null) {
            postOrder(root.left);
            postOrder(root.right);
            postOrderList.add(root.val);
        }
    }
}