二叉树的先根,中根,后根遍历递归思路:根据根左右,左根右,左右根的顺序来递归调用即可实现。
import java.util.ArrayList;
public class Test2 {
private static class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public static void main(String[] args) {
TreeNode root1 = new TreeNode(1);
TreeNode root2 = new TreeNode(2);
TreeNode root3 = new TreeNode(4);
TreeNode root4 = new TreeNode(7);
TreeNode root5 = new TreeNode(9);
TreeNode root6 = new TreeNode(10);
TreeNode root7 = new TreeNode(12);
TreeNode root8 = new TreeNode(22);
TreeNode root9 = new TreeNode(32);
TreeNode root0 = new TreeNode(42);
root1.left = root2;
root1.right = root3;
root2.left = root4;
root2.right = root5;
root4.left = root6;
root6.left = root7;
root7.right = root8;
root3.left = root9;
root3.right = root0;
rootFirst(root1);
System.out.print("先根遍历:\n");
for (Integer integer : rootFirstList) {
System.out.print(integer);
System.out.print(",");
}
System.out.print("\n");
System.out.print("中根遍历:\n");
rootMid(root1);
for (Integer integer : rootMidList) {
System.out.print(integer);
System.out.print(",");
}
System.out.print("\n");
System.out.print("后根遍历:\n");
rootEnd(root1);
for (Integer integer : rootEndList) {
System.out.print(integer);
System.out.print(",");
}
}
static ArrayList<Integer> rootFirstList = new ArrayList<>();
static ArrayList<Integer> rootMidList = new ArrayList<>();
static ArrayList<Integer> rootEndList = new ArrayList<>();
//先根遍历
public static ArrayList<Integer> rootFirst(TreeNode root){
if(root!=null){
rootFirstList.add(root.val);
rootFirst(root.left);
rootFirst(root.right);
return rootFirstList;
}else {
return null;
}
}
//中根遍历
public static ArrayList<Integer> rootMid(TreeNode root){
if(root!=null){
rootMid(root.left);
rootMidList.add(root.val);
rootMid(root.right);
return rootMidList;
}else {
return null;
}
}
//后根遍历
public static ArrayList<Integer> rootEnd(TreeNode root){
if(root!=null){
rootEnd(root.left);
rootEnd(root.right);
rootEndList.add(root.val);
return rootEndList;
}else {
return null;
}
}
}