LeetCode Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:linux进去数据库命令 编辑:程序博客网 时间:2024/06/16 02:15

原题链接在这里:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

这道题是BFS的变形,与Binary Tree Level Order Traversal相似。但是要求偶数行从左到右,奇数行从右到左。

这种顺序正反交替可以用两个stack来实现。一个用来读取,一个用来存储下一层节点。

Time O(n), Space O(n).

Note: 1. 内层loop表示一行,每当一行走完,stk就会变为空,stk需更新成newStk. 外层loop是走完整个树。所以level不要忘记在外层loop更新。

2. 只有当ls.size()>0时,外层loop才会把ls加到res里,如果没有这个限定条件的话会在最后加上一个空的ls到res里。

AC 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;        }        List<Integer> ls = new ArrayList<Integer>();        Stack<TreeNode> stk = new Stack<TreeNode>();        stk.push(root);        ls.add(root.val);        res.add(ls);        int level = 1;        while(!stk.empty()){            Stack<TreeNode> newStk = new Stack<TreeNode>();            ls = new ArrayList<Integer>();                        while(!stk.empty()){                TreeNode tn = stk.pop();                if(level%2 == 0){                    if(tn.left != null){                        ls.add(tn.left.val);                        newStk.push(tn.left);                    }                    if(tn.right != null){                        ls.add(tn.right.val);                        newStk.push(tn.right);                    }                }else{                    if(tn.right != null){                        ls.add(tn.right.val);                        newStk.push(tn.right);                    }                    if(tn.left != null){                        ls.add(tn.left.val);                        newStk.push(tn.left);                    }                }            }            level++;            if(ls.size()>0){ //error                 res.add(ls);             }            stk = newStk;        }        return res;    }}


0 0
原创粉丝点击