二叉树的遍历哈。
首先要了解二叉树的数据结构
然后前中后遍历其实就是从哪个点开始遍历二叉树。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author xienl
* @description 实现二叉树先序,中序和后序遍历
* @date 2022/6/6
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode root = new TreeNode(1, new TreeNode(2), new TreeNode(3));
int[][] ans = solution.threeOrders(root);
for (int[] an : ans) {
System.out.println(Arrays.toString(an));
}
}
List<Integer> preList = new ArrayList<>();
List<Integer> midList = new ArrayList<>();
List<Integer> lastList = new ArrayList<>();
public int[][] threeOrders (TreeNode root) {
if (root == null){
return new int[3][0];
}
pre(root);
mid(root);
last(root);
int[][] result = new int[3][preList.size()];
for (int i = 0; i < preList.size(); i++){
result[0][i] = preList.get(i);
result[1][i] = midList.get(i);
result[2][i] = lastList.get(i);
}
return result;
}
/**
* 前序遍历
* @return
*/
private void pre(TreeNode node){
preList.add(node.val);
if (node.left != null){
pre(node.left);
}
if (node.right != null){
pre(node.right);
}
}
/**
* 中序遍历
* @param node
*/
private void mid(TreeNode node){
if (node.left != null){
mid(node.left);
}
midList.add(node.val);
if (node.right != null){
mid(node.right);
}
}
/**
* 后序遍历
* @param node
*/
private void last(TreeNode node){
if (node.left != null){
last(node.left);
}
if (node.right != null){
last(node.right);
}
lastList.add(node.val);
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
public TreeNode(int val) {
this.val = val;
}
}