本人使用的是java编程,通过二维数组来接收二叉树的遍历结果。
通过递归调用的方法实现。
import java.util.*;
import java.awt.List;
/*
* 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整型二维数组
*/
private int i = 0, j = 0, k = 0;
public int[][] threeOrders (TreeNode root) {
// write code here
int n = treecount(root);
int[][] array = new int[3][n];
writeroot(root, array);
return array;
}
public int treecount(TreeNode root){
if(root == null){
return 0;
}
return 1 + treecount(root.left) + treecount(root.right);
}
public void writeroot(TreeNode root, int[][] array){
if(root == null){
return;
}
array[0][i++] = root.val;
writeroot(root.left, array);
array[1][j++] = root.val;
writeroot(root.right, array);
array[2][k++] = root.val;
}
}
因为需要同时把三种遍历都打印出来,所以需要二维数组,第一维的值是固定的,直接写入3就可以,二维需要判断树的长度,所以需要定义个函数,用来计算二叉树长度。treecount就是通过递归的方式计算二叉树长度,然后将返回的值传给threeOrder函数的n。定义好数组后就是二叉树递归遍历了。
首先从根节点出发:
记录完根节点,遍历其左子树。
在遍历左子树时记录了左子树的根节点,发现它没有了孩子,程序继续向下进行,
此时a0 = {A,B} a1 ={B,A} a2= { }
之后是遍历右子树
开始即进入到右字数中,发现右子树也只有一个节点时,退出。
此时:a0= {A,B,C} a1 = {B,A,C} a2 = {B,C,A}
整个前中后序遍历结束。