题解 | #实现二叉树先序,中序和后序遍历#
实现二叉树先序,中序和后序遍历
http://www.nowcoder.com/practice/a9fec6c46a684ad5a3abd4e365a9d362
实现二叉树先序,中序和后序遍历
描述
分别按照二叉树先序,中序和后序打印所有的节点。
思路
递归。遍历将节点先加入到ArrayList中,再转换成数组,最后返回。
前序遍历
private ArrayList<Integer> pre(ArrayList<Integer> arrayList, TreeNode root) { if (root==null) { return arrayList; } arrayList.add(root.val); if (root.left!=null) { arrayList = pre(arrayList,root.left); } if (root.right!=null) { arrayList = pre(arrayList,root.right); } return arrayList; }
中序遍历
private ArrayList<Integer> mid(ArrayList<Integer> arrayList, TreeNode root) { if (root==null) { return arrayList; } if (root.left!=null) { arrayList = mid(arrayList,root.left); } arrayList.add(root.val); if (root.right!=null) { arrayList = mid(arrayList,root.right); } return arrayList; }
后序遍历
private ArrayList<Integer> aft(ArrayList<Integer> arrayList, TreeNode root) { if (root==null) { return arrayList; } if (root.left!=null) { arrayList = aft(arrayList,root.left); } if (root.right!=null) { arrayList = aft(arrayList,root.right); } arrayList.add(root.val); return arrayList; }
主函数
public int[][] threeOrders(TreeNode root) { ArrayList<Integer> preArrayList = pre(new ArrayList<>(), root); ArrayList<Integer> midArrayList = mid(new ArrayList<>(), root); ArrayList<Integer> aftArrayList = aft(new ArrayList<>(), root); int[] preOrder = new int[preArrayList.size()]; int[] midOrder = new int[midArrayList.size()]; int[] aftOrder = new int[aftArrayList.size()]; for (int i = 0; i < preOrder.length; i++) { preOrder[i] = preArrayList.get(i); midOrder[i] = midArrayList.get(i); aftOrder[i] = aftArrayList.get(i); } int[][] orders = new int[][]{preOrder,midOrder,aftOrder}; return orders; }