题目描述
分别按照二叉树先序,中序和后序打印所有的节点。
解:
这道题倒是没什么难度,主要是动态数组的使用。如果不允许使用动态数组,那么也可以提前遍历一遍确定树节点总数,然后就可以用int[ ]来存储。如果不先遍历,而开足够空间的话,比较浪费内存,因为不确定n到底有多大只能往大了开,最后还得copy。
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 void xian(TreeNode r,ArrayList<Integer> ay){
//中左右
ay.add(r.val);
if(r.left!=null){
xian(r.left,ay);
}
if(r.right!=null){
xian(r.right,ay);
}
}
public void zhong(TreeNode r,ArrayList<Integer> ay){
//左中右
if(r.left!=null){
zhong(r.left,ay);
}
ay.add(r.val);
if(r.right!=null){
zhong(r.right,ay);
}
}
public void hou(TreeNode r,ArrayList<Integer> ay){
//左右中
if(r.left!=null){
hou(r.left,ay);
}
if(r.right!=null){
hou(r.right,ay);
}
ay.add(r.val);
}
public int[][] threeOrders (TreeNode root) {
if(root==null){
return new int[3][0];
}
ArrayList<Integer> ay0=new ArrayList<Integer>();
ArrayList<Integer> ay1=new ArrayList<Integer>();
ArrayList<Integer> ay2=new ArrayList<Integer>();
xian(root,ay0);
zhong(root,ay1);
hou(root,ay2);
int[][] arr=new int[3][];
arr[0]=new int[ay0.size()];
int i=0;
for(Integer v : ay0){
arr[0][i++]=v;
}
arr[1]=new int[ay1.size()];
i=0;
for(Integer v : ay1){
arr[1][i++]=v;
}
arr[2]=new int[ay2.size()];
i=0;
for(Integer v : ay2){
arr[2][i++]=v;
}
return arr;
}
}