题解 | #实现二叉树先序,中序和后序遍历#

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

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

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

描述

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

思路

递归。遍历将节点先加入到ArrayList中,再转换成数组,最后返回。

前序遍历

    private ArrayList<Integer> pre(ArrayList<Integer> arrayList, TreeNode root) {
        if (root==null) {
            return arrayList;
        }
        arrayList.add(root.val);
        if (root.left!=null) {
            arrayList = pre(arrayList,root.left);
        }
        if (root.right!=null) {
            arrayList = pre(arrayList,root.right);
        }
        return arrayList;
    }

中序遍历

    private ArrayList<Integer> mid(ArrayList<Integer> arrayList, TreeNode root) {
        if (root==null) {
            return arrayList;
        }
        if (root.left!=null) {
            arrayList = mid(arrayList,root.left);
        }
        arrayList.add(root.val);
        if (root.right!=null) {
            arrayList = mid(arrayList,root.right);
        }
        return arrayList;
    }

后序遍历

    private ArrayList<Integer> aft(ArrayList<Integer> arrayList, TreeNode root) {
        if (root==null) {
            return arrayList;
        }
        if (root.left!=null) {
            arrayList = aft(arrayList,root.left);
        }
        if (root.right!=null) {
            arrayList = aft(arrayList,root.right);
        }
        arrayList.add(root.val);
        return arrayList;
    }

主函数

    public int[][] threeOrders(TreeNode root) {
        ArrayList<Integer> preArrayList = pre(new ArrayList<>(), root);
        ArrayList<Integer> midArrayList = mid(new ArrayList<>(), root);
        ArrayList<Integer> aftArrayList = aft(new ArrayList<>(), root);
        int[] preOrder = new int[preArrayList.size()];
        int[] midOrder = new int[midArrayList.size()];
        int[] aftOrder = new int[aftArrayList.size()];
        for (int i = 0; i < preOrder.length; i++) {
            preOrder[i] = preArrayList.get(i);
            midOrder[i] = midArrayList.get(i);
            aftOrder[i] = aftArrayList.get(i);
        }
        int[][] orders = new int[][]{preOrder,midOrder,aftOrder};
        return orders;
    }
全部评论

相关推荐

那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-19 14:35
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务