NC45 实现二叉树先序、中序和后序遍历

NC45 实现二叉树先序、中序和后序遍历

题目

描述
给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。

数据范围:0 ≤ n ≤1000,树上每个节点的val值满足 0≤val≤100
要求:空间复杂度 O(n),时间复杂度 O(n)
样例解释:
image
如图二叉树结构
示例1

输入:
{1,2,3}
返回值:
[[1,2,3],[2,1,3],[2,3,1]]
说明:
如题面图 

示例2

输入:
{}

返回值:
[[],[],[]]

备注:
n≤10^6

题解

先序遍历:中左右
中序遍历: 左中右
后序遍历: 右左中

//前序遍历
preOrder(TreeNode root){
	if(root == null)return null;
	System.out.println(root.val);//前序先打印
	preOrder(root.left);//遍历左子树
	preOrder(root.right);//遍历右子树
}
//中序遍历

meOrder(TreeNode root){
	if(root == null)return null;
	preorder(root.left)//遍历左子树
	System.out.println(root.val);
	preorder(root.left)//遍历右子树
}

//后序遍历
postOrder(TreeNode root){
	if(root == null)return null;
	preorder(root.left)//遍历左子树
	preorder(root.left)//遍历右子树
	System.out.println(root.val);
}

这道题的要求是打印在一个二维数组里。

public class Solution {
    public int[][] threeOrders (TreeNode root) {
        ArrayList<Integer>arr1=new ArrayList<>();
        ArrayList<Integer>arr2=new ArrayList<>();
        ArrayList<Integer>arr3=new ArrayList<>();
		traversal(root,arr1,arr2,arr3);
		int [][] res = new int [3][arr1.sieze()];
		for(int i = 0; i < arr1.size(); i++){
            res[0][i] = arr1.get(i);
            res[1][i] = arr2.get(i);
            res[2][i] = arr3.get(i);
        }
        return res;
    }
	//传地址,直接修改
	public void traversal(TreeNode root,ArrayList<Integer> arr1,ArrayList<Integer> arr2,ArrayList<Integer> arr3){
		if(root == null)return;
		arr1.add(root.val);
		traversal(root.left,arr1,arr2,arr3);//遍历左子树
		arr2.add(root.val);
		traversal(root.right,arr1,arr2,arr3);//遍历右子树
		arr3.add(root.val);
	}
}
posted @ 2022-01-03 14:44  rananie  阅读(126)  评论(0编辑  收藏  举报