描述
分别按照二叉树先序,中序和后序打印所有的节点。
示例
输入:
{1,2,3}
返回值:
[[1,2,3],[2,1,3],[2,3,1]]
需要注意的点
- 最终要返回的是一个int[][]
- 每次遍历时的结果int[]创建时需要指定大小,由于不知道整棵树的大小,因此采用ArrayList来实现。后续将ArrayList < Integer >转成int[]即可.
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
ArrayList<Integer> inOrderRes = new ArrayList<Integer>();
ArrayList<Integer> preOrderRes = new ArrayList<Integer>();
ArrayList<Integer> afterOrderRes = new ArrayList<Integer>();
public int[][] threeOrders (TreeNode root) {
// write code here
if(root == null) return null;
int[][] res = new int[3][inOrderRes.size()];
preOrder(root);
inOrder(root);
afterOrder(root);
res[0] = arrayToInt(preOrderRes);
res[1] = arrayToInt(inOrderRes);
res[2] = arrayToInt(afterOrderRes);
return res;
}
public int[] arrayToInt(ArrayList<Integer> list){
if(list == null){
return new int[0];
}
int[] res = new int[list.size()];
for(int i = 0; i < list.size(); i++){
res[i] = list.get(i);
}
return res;
}
public void preOrder(TreeNode root){
if(root == null) return ;
preOrderRes.add(root.val);
preOrder(root.left);
preOrder(root.right);
}
public void inOrder(TreeNode root){
if(root == null) return ;
inOrder(root.left);
inOrderRes.add(root.val);
inOrder(root.right);
}
public void afterOrder(TreeNode root){
if(root == null) return ;
afterOrder(root.left);
afterOrder(root.right);
afterOrderRes.add(root.val);
}
}