题目描述
分别按照二叉树先序,中序和后序打印所有的节点。
示例1
输入
{1,2,3}
输出
[[1,2,3],[2,1,3],[2,3,1]]
Java代码实现
public class TreeNode
{
int data=0; //结点数据
TreeNode left=null;//结点左子树
TreeNode right=null;//结点右子树
}
public class TestOrder {
//建三个ArrayList分别存储三种遍历的结果
ArrayList<Integer> pre = new ArrayList<>();
ArrayList<Integer> in = new ArrayList<>();
ArrayList<Integer> post = new ArrayList<>();
public int[][] threeOrders(test.TreeNode root){
//首先遍历
preOrder(root);
inOrder(root);
postOrder(root);
//记录遍历结果的长度,三种遍历长度相等,任取一种即可
int len = pre.size();
//结果数组
int[][] res = new int[3][len];
//遍历ArrayList,存入数组中
for (int i = 0; i < len; i++)
res[0][i] = pre.get(i);
for (int i = 0; i < len; i++)
res[1][i] = in.get(i);
for (int i = 0; i < len; i++)
res[2][i] = post.get(i);
return res;
}
//前序遍历
public void preOrder(test.TreeNode root){
if (root != null) {
pre.add(root.val);
preOrder(root.left);
preOrder(root.right);
}
}
//中序遍历
public void inOrder(test.TreeNode root){
if (root != null) {
inOrder(root.left);
in.add(root.val);
inOrder(root.right);
}
}
//后序遍历
public void postOrder(test.TreeNode root){
if (root != null) {
postOrder(root.left);
postOrder(root.right);
post.add(root.val);
}
}
}