Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:淘宝店卖肉需要执照吗 编辑:程序博客网 时间:2024/06/06 15:04

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

java

/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */public class Solution {    /*     * @param root: A Tree     * @return: A list of lists of integer include the zigzag level order traversal of its nodes' values.     */    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {        // write your code here        List<List<Integer>> list = new ArrayList<>();        if (root == null) {            return list;        }        Queue<TreeNode> queue = new LinkedList<>();        queue.offer(root);        int count = 0;        while (!queue.isEmpty()) {            int num = queue.size();            List<Integer> value = new ArrayList<>();            for (int i = 0; i < num; i++) {                TreeNode node = queue.poll();                value.add(node.val);                if (node.left != null) {                    queue.offer(node.left);                }                if (node.right != null) {                    queue.offer(node.right);                }            }            if (count % 2 == 0) {                list.add(value);            } else {                Collections.reverse(value);                list.add(value);            }            count++;        }        return list;    }}
python

"""Definition of TreeNode:class TreeNode:    def __init__(self, val):        self.val = val        self.left, self.right = None, None"""class Solution:    """    @param: root: A Tree    @return: A list of lists of integer include the zigzag level order traversal of its nodes' values.    """    def zigzagLevelOrder(self, root):        # write your code here        result = []        if root is None:            return result        queue = [root]        count = 0        while queue:            new_q = []            if count % 2 == 0:                result.append([node.val for node in queue])            else:                arr = [node.val for node in queue]                arr = list(reversed(arr))                result.append(arr)            count += 1                        for node in queue:                if node.left:                    new_q.append(node.left)                if node.right:                    new_q.append(node.right)            queue = new_q                return result 



原创粉丝点击