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

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

http://www.nowcoder.com/questionTerminal/a9fec6c46a684ad5a3abd4e365a9d362

import java.util.*;

/*
 * 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整型二维数组
     */
    static List<Integer> pre = new LinkedList<>();
    static List<Integer> mid = new LinkedList<>();
    static List<Integer> after = new LinkedList<>();

    public int[][] threeOrders (TreeNode root) {
        // write code here
        PreTreeNode(root);
        MidTreeNode(root);
        AfterTreeNode(root);

        int[][] res = {
            pre.stream().mapToInt(Integer::valueOf).toArray(),
            mid.stream().mapToInt(Integer::valueOf).toArray(),
            after.stream().mapToInt(Integer::valueOf).toArray()
        };
        // 这里不执行清空,输出结果有问题
        pre.clear();
        mid.clear();
        after.clear();

        return res;
    }

    private static void PreTreeNode(TreeNode root) {
        if (root == null) {
            return;
        }
        pre.add(root.val);
        PreTreeNode(root.left);
        PreTreeNode(root.right);
    }

    private static void MidTreeNode(TreeNode root) {
        if (root == null) {
            return;
        }
        MidTreeNode(root.left);
        mid.add(root.val);
        MidTreeNode(root.right);
    }

    private static void AfterTreeNode(TreeNode root) {
        if (root == null) {
            return;
        }
        AfterTreeNode(root.left);
        AfterTreeNode(root.right);
        after.add(root.val);
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务