题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

http://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

用一个map先实现层序遍历,结合LinkedList去实现之字形的存贮数据;

 HashMap<Integer, LinkedList<Integer>> map;
 public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        map = new HashMap<Integer, LinkedList<Integer>>();
        pre(0, pRoot);
        ArrayList<ArrayList<Integer>> ans = new ArrayList<>();//结果封装
        for (Map.Entry<Integer, LinkedList<Integer>> tm : map.entrySet()) {
            ArrayList<Integer> list = new ArrayList<Integer>(tm.getValue());
            ans.add(list);

        }
        return ans;
    }

    private void pre(int i, TreeNode pRoot) {
        if (pRoot == null) return;
        if (!map.containsKey(i)) {
            LinkedList<Integer> temp = new LinkedList<>();
            temp.add(pRoot.val);
            map.put(i, temp);
        } else {
            if (i % 2 == 1) {//相隔两层的添加元素顺序刚好相反
                map.get(i).addFirst(pRoot.val);
            } else {
                map.get(i).addLast(pRoot.val);
            }
        }
        if (pRoot.left != null) {
            pre(i + 1, pRoot.left);
        }
        if (pRoot.right != null) {
            pre(i + 1, pRoot.right);
        }
    }
全部评论

相关推荐

03-16 13:56
湖南大学 C++
牛客872108596号:到现在没消息是挂了吗查看图片
点赞 评论 收藏
分享
韵不凡:软件开发的工作需要博士吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务