题解 | #实现二叉树先序,中序和后序遍历#
实现二叉树先序,中序和后序遍历
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;
}