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