java 103.二叉树之字形级别顺序遍历(BFS).java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 103.二叉树之字形级别顺序遍历(BFS).java相关的知识,希望对你有一定的参考价值。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        if (root == null) return res;
        dfs(root, 1, res);
        return res;
    }
    
    private void dfs(TreeNode root, int level, List<List<Integer>> res) {
        if (root == null) return;
        if(res.size() < level) {
            res.add(new ArrayList<Integer>());
        }
        if(level % 2 == 0) {
            res.get(level - 1).add(0, root.val);
        } else {
            res.get(level - 1).add(root.val);
        }
        
        dfs(root.left, level + 1, res);
        dfs(root.right, level + 1, res);
        
    }
}
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if(root == null) return res;

    Queue<TreeNode> q = new LinkedList<>();
    q.add(root);
    boolean order = true;
    int size = 1;

    while(!q.isEmpty()) {
        List<Integer> tmp = new ArrayList<>();
        for(int i = 0; i < size; ++i) {
            TreeNode n = q.poll();
            if(order) {
                tmp.add(n.val);
            } else {
                tmp.add(0, n.val);
            }
            if(n.left != null) q.add(n.left);
            if(n.right != null) q.add(n.right);
        }
        res.add(tmp);
        size = q.size();
        order = order ? false : true;
    }
    return res;
}
}

以上是关于java 103.二叉树之字形级别顺序遍历(BFS).java的主要内容,如果未能解决你的问题,请参考以下文章

java 103.二叉树之字形级别顺序遍历(BFS).java

java 103.二叉树之字形级别顺序遍历(BFS).java

java 103.二叉树之字形级别顺序遍历(BFS).java

java 103.二叉树之字形级别顺序遍历(BFS).java

按之字形顺序打印二叉树

NC14 按之字形顺序打印二叉树