问题描述
分别按照二叉树先序,中序和后序打印所有的节点。
输入描述:
输入一棵树
输出描述:
输出遍历的二维数组
示例
示例1
输入
{1,2,3}
输出
[[1,2,3],[2,1,3],[2,3,1]]
解决思路
分析
本题思路主要是通过递归实现对二叉树的遍历。
方法
- 通过递归,以及添加值的顺序控制结果是那种方式的遍历。
代码实现
public class Solution {
public int pre = 0, midd = 0, post = 0;
public int[][] threeOrders (TreeNode root) {
// write code here
int[][] nums = new int[3][getRootSize(root)];
getOrder(root, nums);
return nums;
}
public void getOrder(TreeNode root, int[][] nums){
if(root == null){return ;}
nums[0][pre++] = root.val;
getOrder(root.left, nums);
nums[1][midd++] = root.val;
getOrder(root.right, nums);
nums[2][post++] = root.val;
}
public int getRootSize(TreeNode root){
if(root == null){return 0;}
return 1 + getRootSize(root.left) + getRootSize(root.right);
}
}
理解(重点)
有些小伙伴可能晕递归,大家可以这样理解:
先序遍历
nums[0][pre++] = root.val; 根左右
getOrder(root.left, nums); 左节点递归
getOrder(root.right, nums); 右节点递归
中序遍历
getOrder(root.left, nums); 左节点递归
nums[1][midd++] = root.val; 左根右
getOrder(root.right, nums); 右节点递归
后序遍历
getOrder(root.left, nums); 左节点递归
getOrder(root.right, nums); 右节点递归
nums[2][post++] = root.val; 左右根
小伙伴如果想测试的话,可以直接到牛客网这个链接做测试