FTPrep, 103 Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:java源代码文件夹在 编辑:程序博客网 时间:2024/06/15 13:57

这道题和上面的102极像,为了正反方向,可以设置一个level的变量,看level的奇偶数 来觉得读取的方向。

但是 要保持头脑清醒,这里的正方向,看似是读取的方向,实际上可以不是读取的方向!!如果看成是读取的方向,那在写判断条件的时内部的操作,代码就很多。换一个角度,其实还是保持从左到右的读取方向,但是在存入 item list 时可以倒着存入!!每次都存入 位置是 0 的点,这样就非常简单的完成了任务!

代码如下,一目了然:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */// interface name: zigzagLevelOrder// input TreeNode root;// output  List<List<Integer>>public class Solution{    public List<List<Integer>> zigzagLevelOrder(TreeNode root){        List<List<Integer>> result = new ArrayList<>();        if(root==null) return result;        int level=1;        List<TreeNode> currLevel = new ArrayList<>();        currLevel.add(root);        while(!currLevel.isEmpty()){            List<Integer> numList = new ArrayList<>();            List<TreeNode> nextLevel = new ArrayList<>();            for(TreeNode node: currLevel){                // read value                if(level%2==1) numList.add(node.val);                else numList.add(0, node.val);                // generate next level                if(node.left!=null) nextLevel.add(node.left);                if(node.right!=null) nextLevel.add(node.right);            }            result.add(numList);            currLevel=nextLevel;            level++;        }        return result;    }}// key point: 1, simplify the logic; 2, adding elem in front of the list: list.add(0, node.val);



原创粉丝点击