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

按之字形顺序打印二叉树

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

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

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        LinkedList<TreeNode> nodes = new LinkedList<>();
        ArrayList <ArrayList<Integer>>results = new ArrayList();
        boolean reverse = true;
        if (pRoot != null) {
            nodes.add(pRoot);
            while (!nodes.isEmpty()) {
                ArrayList<Integer> integers = new ArrayList();
                int size = nodes.size();
                for (int i = 0; i < size; i++) {
                    TreeNode node = nodes.poll();
                    if (reverse) {
                        integers.add(node.val);
                    } else {
                        integers.add(0, node.val);
                    }
                    if (node.left != null) {
                        nodes.offer(node.left);
                    }
                    if (node.right != null) {
                        nodes.offer(node.right);
                    }
                }
                if (integers.size() != 0) {
                    results.add(integers);
                }
                reverse = !reverse;
            }
        }
        return results;
    }

}

解题思想:

1. 借助双向链表,初始化⼀个添加⽅向 boolean 值,先将根节点添加进去:

2. 获取 list ⾥⾯剩下的元素的个数,挨个取出就是⼀层,取出的时候,如果reverse 为 true ,则往链表的第 0 个索引位置添加,否则直接在后⾯添加,然后判断每⼀个取出来的节点的左右节点是不是为空,不为空则加⼊链表。

3. 每⼀层处理完之后,将 list 加⼊结果集中,然后翻转 reverse 的值,继续判断list 是不是为空,执⾏第⼆步循环。

#算法笔记##算法#
全部评论

相关推荐

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