面试必考真题-算法篇 牛客网
栈 树 哈希
题目描述
分别按照二叉树先序,中序和后序打印所有的节点。
题目分析:
方法一
直接按照前中后序遍历方法进行递归遍历,结果添加至二维数组即可。
下面是Java代码
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> pre = new ArrayList<>();
ArrayList<Integer> mid = new ArrayList<>();
ArrayList<Integer> post = new ArrayList<>();
public int[][] threeOrders (TreeNode root) {
// write code here
if(root == null){
return new int[][]{{}};
}
DLR(root);
LDR(root);
LRD(root);
int len = pre.size();
int[][] result = new int[3][len];
for(int i = 0; i < len;i++){
result[0][i] = pre.get(i);
}
for(int i = 0; i < len;i++){
result[1][i] = mid.get(i);
}
for(int i = 0; i < len;i++){
result[2][i] = post.get(i);
}
return result;
}
private ArrayList<Integer> DLR(TreeNode root){
if(root ==null){
return pre;
}
pre.add(root.val);
DLR(root.left);
DLR(root.right);
return pre;
}
private ArrayList<Integer> LDR(TreeNode root){
if(root ==null){
return mid;
}
LDR(root.left);
mid.add(root.val);
LDR(root.right);
return mid;
}
private ArrayList<Integer> LRD(TreeNode root){
if(root ==null){
return post;
}
LRD(root.left);
LRD(root.right);
post.add(root.val);
return post;
}
}
方法二
三种遍历可以直接整合到一起写,减少代码量。
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> pre = new ArrayList<>();
ArrayList<Integer> mid = new ArrayList<>();
ArrayList<Integer> post = new ArrayList<>();
public int[][] threeOrders (TreeNode root) {
// write code here
if(root == null){
return new int[][]{{}};
}
dfs(root);
int len = pre.size();
int[][] result = new int[3][len];
for(int i = 0; i < len;i++){
result[0][i] = pre.get(i);
}
for(int i = 0; i < len;i++){
result[1][i] = mid.get(i);
}
for(int i = 0; i < len;i++){
result[2][i] = post.get(i);
}
return result;
}
private void dfs(TreeNode root){
if(root ==null){
return ;
}
pre.add(root.val);
dfs(root.left);
mid.add(root.val);
dfs(root.right);
post.add(root.val);
return ;
}
}