描述
给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。
数据范围:0 \le n \le 10000≤n≤1000,树上每个节点的val值满足 0 \le val \le 1000≤val≤100
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
样例解释:
如图二叉树结构
示例1
输入:
{1,2,3}
返回值:
[[1,2,3],[2,1,3],[2,3,1]]
说明:
如题面图
示例2
输入:
{}
返回值:
[[],[],[]]
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
if (root == null) {
return new int[][]{new int[]{},new int[]{},new int[]{}};
}
//先序遍历
ArrayList<Integer> temp1 = new ArrayList<>();
getPre (temp1, root);
//中序遍历
ArrayList<Integer> temp2 = new ArrayList<>();
getMid (temp2,root);
//后序遍历
ArrayList<Integer> temp3 = new ArrayList<>();
getBack (temp3,root);
int[][] result = new int[3][temp1.size()];
for (int i=0;i<temp1.size();i++) {
result[0][i] = temp1.get(i);
}
for (int j=0;j<temp2.size();j++) {
result[1][j] = temp2.get(j);
}
for (int k=0;k<temp3.size();k++) {
result[2][k] = temp3.get(k);
}
return result;
}
//后序遍历
public void getPre (List<Integer> temp1,TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
stack.add(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
if (node != null) {
temp1.add(node.val);
if (node.right != null) {
stack.add(node.right);
}
if (node.left != null) {
stack.add(node.left);
}
}
}
}
//中序遍历
public void getMid (List<Integer> temp2,TreeNode root) {
Stack<TreeNode> stack2 = new Stack<>();
TreeNode cur = root;
while(cur != null || !stack2.isEmpty()) {
if (cur != null) {
stack2.add(cur);
cur = cur.left;
} else {
cur = stack2.pop();
temp2.add(cur.val);
cur = cur.right;
}
}
}
//后序遍历
public void getBack (List<Integer> temp3,TreeNode root) {
Stack<TreeNode> stack3 = new Stack<>();
stack3.add(root);
while (!stack3.isEmpty()) {
TreeNode node3 = stack3.pop();
if (node3 != null) {
temp3.add(node3.val);
if (node3.left != null) {
stack3.add(node3.left);
}
if (node3.right != null) {
stack3.add(node3.right);
}
}
}
Collections.reverse(temp3);
}
}