LeetCode 49 Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:js方法传递对象参数 编辑:程序博客网 时间:2024/06/08 14:05

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).

For example:

Given binary tree {3,9,20,#,#,15,7},

  3 / \9  20   / \  15  7
return its zigzag level order traversal as:

[  [3],  [20, 9],  [15, 7]]
分析:

层序遍历的变种,每层反向,可用栈代替队列来实现反向。

/** * Definition for binary tree * 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>> result = new ArrayList<List<Integer>>();        if(root==null) return result;        Stack<TreeNode> st1 = new Stack<TreeNode>();        Stack<TreeNode> st2 = new Stack<TreeNode>();        st1.push(root);        while(st1.size()>0 || st2.size()>0 ){            List<Integer> level = new ArrayList<Integer>();            if(st1.size()>0){                while(st1.size()>0){                    TreeNode temp = st1.pop();                    level.add(temp.val);                    if(temp.left != null) st2.push(temp.left);                    if(temp.right != null) st2.push(temp.right);                }                result.add(level);                continue;            }            if(st2.size()>0){                while(st2.size()>0){                    TreeNode temp = st2.pop();                    level.add(temp.val);                    if(temp.right!= null) st1.push(temp.right);                    if(temp.left != null) st1.push(temp.left);                }                result.add(level);            }        }        return result;    }}



0 0
原创粉丝点击