实现二叉树先序,中序和后序遍历,字节面试

193 阅读1分钟

题目描述

分别按照二叉树先序,中序和后序打印所有的节点。

示例1

输入

{1,2,3}

返回值

[[1,2,3],[2,1,3],[2,3,1]]

备注:

n \leq 10^6n≤10

Language: java

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
import java.util.*;

public class Solution {
    /**
     * 
     * @param root TreeNode类 the root of binary tree
     * @return int整型二维数组
     */
    List<Integer> preList = new ArrayList();
    List<Integer> inList = new  ArrayList();
    List<Integer> postList = new ArrayList();
   
    public int[][] threeOrders (TreeNode root) {
        // write code here
        //先序遍历 ,前中后
        if(root == null) return new int[0][0];
        preOrder(root);
        inOrder(root);
        postOrder(root);
        int[][] res = new int[3][];
        res[0] = preList.stream().mapToInt(Integer::intValue).toArray();
        res[1] = inList.stream().mapToInt(Integer::intValue).toArray();
        res[2] = postList.stream().mapToInt(Integer::intValue).toArray();
        return res;
    }
    /**
    * 前序遍历
    **/
    private void preOrder(TreeNode node)
    {
        if(node == null) return ;
        preList.add(node.val);
        preOrder(node.left);
        preOrder(node.right);
    }
    
    /**
    * 中序遍历
    **/
    private void inOrder(TreeNode node)
    {
        if(node == null) return;
        inOrder(node.left);
        inList.add(node.val);
        inOrder(node.right);
    }
    
    private void postOrder(TreeNode node)
    {
        if(node == null) return;
        postOrder(node.left);
        postOrder(node.right);
        
        postList.add(node.val);
    }
}