给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。
数据范围:
,树上每个节点的val值满足
要求:空间复杂度
,时间复杂度
样例解释:
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
/**
* NC45 实现二叉树先序,中序和后序遍历
* @author d3y1
*/
public class Solution {
private ArrayList<Integer> list = new ArrayList<>();
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
return solution1(root);
// return solution2(root);
}
/**
* 递归法
* @param root
* @return
*/
private int[][] solution1(TreeNode root){
run(root);
int n = list.size()/3;
int[][] results = new int[3][n];
for(int i=0; i<3; i++){
for(int j=0; j<n; j++){
results[i][j] = list.get(i*n+j);
}
}
return results;
}
/**
* 按序运行: 前序 -> 中序 -> 后序
* @param root
*/
private void run(TreeNode root){
preOrder(root);
inOrder(root);
postOrder(root);
}
/**
* 前序遍历
* @param root
*/
private void preOrder(TreeNode root){
if(root == null){
return;
}
list.add(root.val);
preOrder(root.left);
preOrder(root.right);
}
/**
* 中序遍历
* @param root
*/
private void inOrder(TreeNode root){
if(root == null){
return;
}
inOrder(root.left);
list.add(root.val);
inOrder(root.right);
}
/**
* 后序遍历
* @param root
*/
private void postOrder(TreeNode root){
if(root == null){
return;
}
postOrder(root.left);
postOrder(root.right);
list.add(root.val);
}
//////////////////////////////////////////////////////////////////////////////////////
/**
* 迭代法
* @param root
* @return
*/
private int[][] solution2(TreeNode root){
operate(root);
int n = list.size()/3;
int[][] results = new int[3][n];
for(int i=0; i<3; i++){
for(int j=0; j<n; j++){
results[i][j] = list.get(i*n+j);
}
}
return results;
}
/**
* 按序运行: 前序 -> 中序 -> 后序
* @param root
*/
private void operate(TreeNode root){
preorder(root);
inorder(root);
postorder(root);
}
/**
* 前序遍历: 栈
* @param root
* @return
*/
private void preorder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
if(root == null){
return;
}
stack.push(root);
TreeNode node;
while(!stack.isEmpty()){
node = stack.pop();
list.add(node.val);
if(node.right != null){
stack.push(node.right);
}
if(node.left != null){
stack.push(node.left);
}
}
}
/**
* 中序遍历: 栈
* @param root
* @return
*/
private void inorder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
TreeNode curr;
while(root!=null || !stack.isEmpty()){
// 最左边
while(root != null){
stack.push(root);
root = root.left;
}
curr = stack.pop();
list.add(curr.val);
root = curr.right;
}
}
/**
* 后序遍历: 栈
* @param root
* @return
*/
private void postorder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
TreeNode curr;
// 上次访问
TreeNode last = null;
while(root!=null || !stack.isEmpty()){
// 最左边
while(root != null){
stack.push(root);
root = root.left;
}
curr = stack.pop();
// 右节点为空或已访问
if(curr.right==null || curr.right==last){
// 访问当前节点
list.add(curr.val);
last = curr;
}
// 右节点非空且未访问
else{
// 当前节点再次入栈
stack.push(curr);
root = curr.right;
}
}
}
} import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
int[][] arr = new int[3][];
//先序
List<Integer> preList = new ArrayList<>();
preorder(root, preList);
//中序
List<Integer> inList = new ArrayList<>();
inorder(root, inList);
//后序
List<Integer> postList = new ArrayList<>();
postorder(root, postList);
//封装结果
int[] preArr = new int[preList.size()];
int[] inArr = new int[inList.size()];
int[] postArr = new int[postList.size()];
for(int i=0;i<preList.size();i++){
preArr[i] = preList.get(i);
}
for(int i=0;i<inList.size();i++){
inArr[i] = inList.get(i);
}
for(int i=0;i<postList.size();i++){
postArr[i] = postList.get(i);
}
arr[0] = preArr;
arr[1] = inArr;
arr[2] = postArr;
return arr;
}
public void preorder(TreeNode root, List<Integer> preList) {
if (root == null) {
return;
}
preList.add(root.val);
preorder(root.left, preList);
preorder(root.right, preList);
}
public void inorder(TreeNode root, List<Integer> preList) {
if (root == null) {
return;
}
preorder(root.left, preList);
preList.add(root.val);
preorder(root.right, preList);
}
public void postorder(TreeNode root, List<Integer> preList) {
if (root == null) {
return;
}
preorder(root.left, preList);
preorder(root.right, preList);
preList.add(root.val);
}
} import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
int[][] travel = new int[3][];
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
if(root==null)
{
return new int[3][0];
}
TreeNode cur = root;
//先序遍历
ArrayList<Integer> list = new ArrayList<>();
Pre(cur,list);
travel[0] = listToArr(list);
list.clear();//清空列表
cur = root;
In(cur,list);
travel[1] = listToArr(list);
list.clear();//清空列表
cur = root;
Last(cur,list);
travel[2] = listToArr(list);
list.clear();//清空列表
return travel;
}
//二叉树的先序遍历
public void Pre(TreeNode root,ArrayList<Integer> PreList)
{
if(root==null)
return;
PreList.add(root.val);
Pre(root.left,PreList);
Pre(root.right,PreList);
}
//二叉树的中序遍历
public void In(TreeNode root, ArrayList<Integer> InList)
{
if(root==null)
return;
In(root.left,InList);
InList.add(root.val);
In(root.right,InList);
}
//二叉树的后序遍历
public void Last(TreeNode root,ArrayList<Integer> LastList)
{
if(root==null)
return;
Last(root.left,LastList);
Last(root.right,LastList);
LastList.add(root.val);
}
//将list转换为数组
public int[] listToArr(ArrayList<Integer> list)
{
if(list!=null && list.size()!=0)
{
int[] arr = new int[list.size()];
int index = 0;
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext())
{
arr[index++] = iterator.next();
}
return arr;
}
return null;
}
} import java.util.*;
public class Solution {
public int[][] threeOrders (TreeNode root) {
int[][] resList = new int[3][];
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> list2 = new ArrayList<Integer>();
List<Integer> list3 = new ArrayList<Integer>();
preOrder(root,list1);
inOrder(root,list2);
postOrder(root,list3);
resList[0] = new int[list1.size()];
resList[1] = new int[list2.size()];
resList[2] = new int[list3.size()];
for(int i=0;i<list1.size();i++){
resList[0][i] = list1.get(i);
resList[1][i] = list2.get(i);
resList[2][i] = list3.get(i);
}
return resList;
}
public void preOrder(TreeNode root,List<Integer> list){
if(root != null){
list.add(root.val);
preOrder(root.left,list);
preOrder(root.right,list);
}
}
public void inOrder(TreeNode root,List<Integer> list){
if(root != null){
inOrder(root.left,list);
list.add(root.val);
inOrder(root.right,list);
}
}
public void postOrder(TreeNode root,List<Integer> list){
if(root != null){
postOrder(root.left,list);
postOrder(root.right,list);
list.add(root.val);
}
}
} import java.util.*;
public class Solution {
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
if(root==null){//没有元素
return new int[3][0];
}
ArrayList<Integer> firstList=new ArrayList<>();
ArrayList<Integer> secondList=new ArrayList<>();
ArrayList<Integer> thirdList=new ArrayList<>();
preTravel(firstList,root);
midTravel(secondList,root);
postTravel(thirdList,root);
int length=firstList.size();
int[][] arr=new int[3][length];
for(int i=0;i<length;i++){
arr[0][i]=firstList.get(i);
}
for(int i=0;i<length;i++){
arr[1][i]=secondList.get(i);
}
for(int i=0;i<length;i++){
arr[2][i]=thirdList.get(i);
}
return arr;
}
//前序遍历
public void preTravel(ArrayList<Integer> firstList,TreeNode root){
firstList.add(root.val);
if(root.left!=null){
preTravel(firstList,root.left);
}
if(root.right!=null){
preTravel(firstList,root.right);
}
}
//中序遍历
public void midTravel(ArrayList<Integer> secondList,TreeNode root){
if(root.left!=null){
midTravel(secondList,root.left);
}
secondList.add(root.val);
if(root.right!=null){
midTravel(secondList,root.right);
}
}
//后序遍历
public void postTravel(ArrayList<Integer> thirdList,TreeNode root){
if(root.left!=null){
postTravel(thirdList,root.left);
}
if(root.right!=null){
postTravel(thirdList,root.right);
}
thirdList.add(root.val);
}
} import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
class Solution{
/**
* 描述: 给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
ArrayList<Integer> path0 = new ArrayList<>();
ArrayList<Integer> path1 = new ArrayList<>();
ArrayList<Integer> path2 = new ArrayList<>();
orderDFS(root,path0,0);
orderDFS(root,path1,1);
orderDFS(root,path2,2);
int[][] res = new int[3][path0.size()];
for (int i = 0; i < path0.size(); i++) {
res[0][i] = path0.get(i);
res[1][i] = path1.get(i);
res[2][i] = path2.get(i);
}
return res;
}
public void orderDFS(TreeNode root, List<Integer> path, int order){
if (order!=0 && order!=1 && order != 2)
throw new RuntimeException("order must in [0,1,2]");
if (root == null) return;
int curVal = root.val;
if (order == 0)
path.add(curVal);
orderDFS(root.left,path,order);
if (order == 1)
path.add(curVal);
orderDFS(root.right,path,order);
if (order == 2)
path.add(curVal);
}
// static class TreeNode{
// int val = 0;
// TreeNode left = null;
// TreeNode right = null;
// }
} import java.util.ArrayList;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
ArrayList<Integer> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
ArrayList<Integer> list3 = new ArrayList<>();
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
// 递归
preOrder(root);
inOrder(root);
postOrder(root);
int n = list1.size();
int[][] ans = new int[3][];
for(int i=0; i<3; i++) {
ArrayList<Integer> list;
switch(i) {
case 0: list = list1;break;
case 1: list = list2;break;
default: list = list3;break;
}
int[] temp = new int[n];
ans[i] = temp;
for(int j=0; j<n; j++) {
temp[j] = list.get(j);
}
}
return ans;
}
// 前序遍历
public void preOrder(TreeNode root) {
if (root == null) {
return;
}
list1.add(root.val);
preOrder(root.left);
preOrder(root.right);
}
// 中序遍历
public void inOrder(TreeNode root) {
if (root == null) {
return;
}
inOrder(root.left);
list2.add(root.val);
inOrder(root.right);
}
// 后序遍历
public void postOrder(TreeNode root) {
if (root == null) {
return;
}
postOrder(root.left);
postOrder(root.right);
list3.add(root.val);
}
} import java.util.ArrayList;
import java.util.Stack;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
ArrayList<Integer> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
ArrayList<Integer> list3 = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>(); // 工具栈
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
// 迭代
preOrder(root);
inOrder(root);
postOrder(root);
int n = list1.size();
int[][] ans = new int[3][];
for(int i=0; i<3; i++) {
ArrayList<Integer> list;
switch(i) {
case 0: list = list1;break;
case 1: list = list2;break;
default: list = list3;break;
}
int[] temp = new int[n];
ans[i] = temp;
for(int j=0; j<n; j++) {
temp[j] = list.get(j);
}
}
return ans;
}
// 前序遍历
// 前序遍历:类似层次遍历
public void preOrder(TreeNode root) {
if (root == null) {
return;
}
stack.clear();
stack.push(root);
while(!stack.isEmpty()) {
TreeNode curr = stack.pop(); // 此处直接pop,因为先序不用考虑回溯
list1.add(curr.val);
if (curr.right != null) { // 先入右孩子,再入左孩子,才能保证左孩子先出栈
stack.push(curr.right);
}
if (curr.left != null) {
stack.push(curr.left);
}
}
}
// 中序遍历
// 中序遍历:回溯算法
public void inOrder(TreeNode root) {
stack.clear();
TreeNode curr = root; // curr保存了当前需要处理的节点,而不是已经处理了的节点
while(curr != null || !stack.isEmpty()) {
if (curr != null) {
stack.push(curr); // 如果curr是正向遍历得到的,则需要保存到栈中,方便后续回溯
curr = curr.left; // 接下来需要处理左孩子
} else {
curr = stack.pop(); // 如果curr是反向回溯得到的,则需要将其值保存到结果集中
list2.add(curr.val);
curr = curr.right; // 接下来处理右孩子
}
}
}
// 后序遍历
// 后序遍历:回溯算法 + 层次遍历
public void postOrder(TreeNode root) {
if (root == null) {
return;
}
stack.clear();
stack.push(root);
TreeNode pre = null; // 指向上次访问的节点
while(!stack.isEmpty()) {
TreeNode curr = stack.peek();
// 如果当前节点是叶子节点、或者当前节点的左右孩子节点已经被访问过了,那么将当前节点值保存,并且回溯
if ((curr.left == null && curr.right == null) || (pre != null && (pre == curr.left || pre == curr.right))) {
list3.add(curr.val);
pre = curr;
stack.pop();
} else {
if (curr.right != null) {
stack.push(curr.right);
}
if (curr.left != null) {
stack.push(curr.left);
}
}
}
}
} 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整型二维数组
*/
private int nodeNum=0;
private int preIndex=0;
private int inIndex=0;
private int postIndex=0;
public int[][] threeOrders (TreeNode root) {
// write code here
this.getNodeNum(root);
int res[][]=new int[3][nodeNum];
for(int i=0;i<3;i++){
res[i]=new int [nodeNum];
}
this.preOrder(res[0],root);
this.inOrder(res[1],root);
this.postOrder(res[2],root);
return res;
}
public void getNodeNum(TreeNode root){
if(root==null)
return;
nodeNum++;
getNodeNum(root.left);
getNodeNum(root.right);
}
public void preOrder(int res[],TreeNode root){
if(root==null)
return;
res[preIndex++]=root.val;
preOrder(res,root.left);
preOrder(res,root.right);
}
public void inOrder(int res[],TreeNode root){
if(root==null)
return;
inOrder(res,root.left);
res[inIndex++]=root.val;
inOrder(res,root.right);
}
public void postOrder(int res[],TreeNode root){
if(root==null)
return;
postOrder(res,root.left);
postOrder(res,root.right);
res[postIndex++]=root.val;
}
} import java.util.*;
public class Solution {
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
private int fistIndex = 0;
private int middleIndex = 0;
private int lastIndex = 0;
private int length;
public int[][] threeOrders (TreeNode root) {
// write code here
length(root);
int[][] res = new int[3][length];
int[] f = new int[length];
int[] m = new int[length];
int[] l = new int[length];
firstOrder(root,f);
middleOrder(root,m);
lastOrder(root,l);
res[0] = f;
res[1] = m;
res[2] = l;
return res;
}
public void firstOrder(TreeNode node,int[] res){
if(node == null)
return;
res[fistIndex++]=node.val;
firstOrder(node.left,res);
firstOrder(node.right,res);
}
public void middleOrder(TreeNode node,int[] res){
if(node == null)
return;
middleOrder(node.left,res);
res[middleIndex++]=node.val;
middleOrder(node.right,res);
}
public void lastOrder(TreeNode node,int[] res){
if(node == null)
return;
lastOrder(node.left,res);
lastOrder(node.right,res);
res[lastIndex++]=node.val;
}
public void length(TreeNode node){
if(node == null)
return;
length ++;
length(node.left);
length(node.right);
}
} 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整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
List<Integer> preList = new ArrayList();
List<Integer> midList = new ArrayList();
List<Integer> afterList = new ArrayList();
preOrder(root,preList);
midOrder(root,midList);
afterOrder(root,afterList);
int len=preList.size();
int [][]result=new int[3][len];
for(int i=0;i<len;i++){
result[0][i]=preList.get(i);
}
for(int i=0;i<len;i++){
result[1][i]=midList.get(i);
}
for(int i=0;i<len;i++){
result[2][i]=afterList.get(i);
}
return result;
}
//先序 中左右
public void preOrder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
list.add(root.val);
preOrder(root.left,list);
preOrder(root.right,list);
}
//中序 左中右
public void midOrder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
midOrder(root.left,list);
list.add(root.val);
midOrder(root.right,list);
}
//后序 左右中
public void afterOrder(TreeNode root,List<Integer> list){
if(root==null){
return;
}
afterOrder(root.left,list);
afterOrder(root.right,list);
list.add(root.val);
}
} public class Solution {
public int[][] threeOrders (TreeNode root) {
ArrayList<Integer>arr1=new ArrayList<>();
ArrayList<Integer>arr2=new ArrayList<>();
ArrayList<Integer>arr3=new ArrayList<>();
first(root,arr1,arr2,arr3);
int[][] res = new int[3][arr1.size()];
for(int i = 0; i < arr1.size(); i++){
res[0][i] = arr1.get(i);
res[1][i] = arr2.get(i);
res[2][i] = arr3.get(i);
}
return res;
}
void first(TreeNode root,ArrayList<Integer> arr1,ArrayList<Integer> arr2,ArrayList<Integer> arr3){
if(root==null){
return;
}
arr1.add(root.val);
first(root.left,arr1,arr2,arr3);
arr2.add(root.val);
first(root.right,arr1,arr2,arr3);
arr3.add(root.val);
}
} public class Solution {
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
int [][] ans = new int [3][];
if (root == null) {
ans[0] = new int[]{};
ans[1] = new int[]{};
ans[2] = new int[]{};
return ans;
}
List<Integer> preSerial = new ArrayList<Integer>();
List<Integer> midSerial = new ArrayList<Integer>();
List<Integer> afterSerial = new ArrayList<Integer>();
preOrder(root, preSerial, midSerial, afterSerial);
int [] preArray = new int[preSerial.size()];
int [] midArray = new int[midSerial.size()];
int [] afterArray = new int[afterSerial.size()];
for (int i = 0; i < preSerial.size(); i++) {
preArray[i] = preSerial.get(i);
midArray[i] = midSerial.get(i);
afterArray[i] = afterSerial.get(i);
}
ans[0]= preArray;
ans[1]=midArray;
ans[2]=afterArray;
return ans;
}
private void preOrder(TreeNode node, List<Integer> nodes, List<Integer> midNodes, List<Integer> afterNodes) {
if (node == null) {
return;
}
nodes.add(node.val);
preOrder(node.left, nodes, midNodes,afterNodes);
midNodes.add(node.val);
preOrder(node.right, nodes,midNodes,afterNodes);
afterNodes.add(node.val);
}
} 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整型二维数组
*/
List<Integer> order = new ArrayList<>();
public int[][] threeOrders (TreeNode root) {
// write code here
int[][] orders = new int[3][];
//adding pre order in orders
preOrderTrav(root);
int len = order.size();
int[] preOrder = new int[len];
orders[0] = addElementInArray(order,preOrder);
//clear the order list
order.clear();
//adding in order in orders
inOrderTrav(root);
int[] inOrder = new int[len];
orders[1] = addElementInArray(order,inOrder);
//clear the order list
order.clear();
//adding post order in orders
postOrderTrav(root);
int[] postOrder = new int[len];
orders[2] = addElementInArray(order,postOrder);
//clear the order list
order.clear();
return orders;
}
public void preOrderTrav(TreeNode root){
TreeNode node = root;
if(node != null){
order.add(node.val);
preOrderTrav(node.left);
preOrderTrav(node.right);
}
}
public void inOrderTrav(TreeNode root){
TreeNode node = root;
if(node != null){
inOrderTrav(node.left);
order.add(node.val);
inOrderTrav(node.right);
}
}
public void postOrderTrav(TreeNode root){
TreeNode node = root;
if(node != null){
postOrderTrav(node.left);
postOrderTrav(node.right);
order.add(node.val);
}
}
public int[] addElementInArray(List<Integer> list, int[] array){
for(int i = 0; i < array.length; i++){
array[i] = list.get(i);
}
return array;
}
} public class Solution {
public int[][] threeOrders (TreeNode root) {
int[][]temp = new int[3][0];
if (root == null) return temp;
ArrayList<Integer> first = new ArrayList<>();
ArrayList<Integer> mid = new ArrayList<>();
ArrayList<Integer> back = new ArrayList<>();
DFS(root, first, mid, back);
int[][] res = new int[3][first.size()];
for (int i = 0; i < first.size(); i++){
res[0][i] = first.get(i);
res[1][i] = mid.get(i);
res[2][i] = back.get(i);
}
return res;
}
void DFS(TreeNode root, ArrayList<Integer> first, ArrayList<Integer> mid,
ArrayList<Integer> back){
if (root == null)
return;
first.add(root.val);
DFS(root.left, first, mid, back);
mid.add(root.val);
DFS(root.right, first, mid, back);
back.add(root.val);
}
} public class Solution {
/**
*
* @param root TreeNode类 the root of binary tree
* @return int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
ArrayList<ArrayList<Integer>> returnList = new ArrayList<>();
returnList.add(new ArrayList<Integer>());
returnList.add(new ArrayList<Integer>());
returnList.add(new ArrayList<Integer>());
firstOrder(root,returnList.get(0));
middleOrder(root,returnList.get(1));
lastOrder(root,returnList.get(2));
int[][] returnMatrix = new int[3][];
for(int i = 0; i < 3; i++){
returnMatrix[i] = new int[returnList.get(i).size()];
for(int j = 0 ; j < returnList.get(i).size(); j++){
returnMatrix[i][j] = returnList.get(i).get(j);
}
}
return returnMatrix;
}
public void firstOrder(TreeNode root,ArrayList<Integer> scanList){
if(root != null){
scanList.add(root.val);
firstOrder(root.left,scanList);
firstOrder(root.right,scanList);
}
}
public void middleOrder(TreeNode root,ArrayList<Integer> scanList){
if(root != null){
middleOrder(root.left,scanList);
scanList.add(root.val);
middleOrder(root.right,scanList);
}
}
public void lastOrder(TreeNode root,ArrayList<Integer> scanList){
if(root != null){
lastOrder(root.left,scanList);
lastOrder(root.right,scanList);
scanList.add(root.val);
}
}
}