Recorrido de secuencia en zigzag del árbol binario java

Dado un árbol binario, devuelve el recorrido de la secuencia en zigzag de sus valores de nodo. (Es decir, atraviese la siguiente capa de izquierda a derecha, y luego de derecha a izquierda, y así sucesivamente, alternando entre capas).

Por ejemplo:
dado un árbol binario [3,9,20, null, null, 15,7],

3
/ \
9 20
… / \
… 15 7
Devuelve el recorrido de la secuencia en zigzag de la siguiente manera:

[
[3],
[20,9],
[15,7]
]

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Idea: pregunta de bfs, si tratar de izquierda a derecha o de derecha a izquierda está bien

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    
    
        List<List<Integer>> res = new LinkedList<List<Integer>>();
        if (root == null) {
    
    return res;}
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        //offer和put的区别,队列满offer返回false,put抛出异常
        queue.offer(root);
        boolean isOrderLeft = true;

        while (!queue.isEmpty()) {
    
    
            Deque<Integer> levelList = new LinkedList<Integer>();
            int size = queue.size();
            for (int i = 0; i < size; ++i) {
    
    
                TreeNode curNode = queue.poll();
                if (isOrderLeft) {
    
    
                    levelList.offerLast(curNode.val);
                } else {
    
    
                    levelList.offerFirst(curNode.val);
                }
                if (curNode.left != null) {
    
    
                    queue.offer(curNode.left);
                }
                if (curNode.right != null) {
    
    
                    queue.offer(curNode.right);
                }
            }
            res.add(new LinkedList<Integer>(levelList));
            
            isOrderLeft = !isOrderLeft;
        }

        return res;
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43824233/article/details/111554559
Recomendado
Clasificación