leetcode

来源:互联网 发布:多级代理管理系统源码 编辑:程序博客网 时间:2024/06/06 08:30

Binary Tree Zigzag Level Order Traversal

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,null,null,15,7],

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

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

Solution1:

  public List<List<Integer>> zigzagLevelOrder(TreeNode root) {    List<List<Integer>> result = new ArrayList<>();    levelOrder(root, result, 0);    for (int i = 1; i < result.size(); i += 2) {      Collections.reverse(result.get(i));    }    return result;  }  private void levelOrder(TreeNode root, List<List<Integer>> result, int level) {    if (root == null)      return;    if (result.size() <= level || result.get(level) == null)      result.add(level, new ArrayList<>());    result.get(level).add(root.val);    levelOrder(root.left, result, level + 1);    levelOrder(root.right, result, level + 1);  }

Solution2:

  public List<List<Integer>> zigzagLevelOrder(TreeNode root) {    List<List<Integer>> result = new ArrayList<>();    zigzagLevelOrder(root, result, 0);    return result;  }  private void zigzagLevelOrder(TreeNode root, List<List<Integer>> result, int level) {    if (root == null)      return;    if (result.size() <= level || result.get(level) == null)      result.add(level, new LinkedList<>());    List<Integer> list = result.get(level);    if (level % 2 == 0) {      list.add(root.val);    } else {      list.add(0, root.val);    }    zigzagLevelOrder(root.left, result, level + 1);    zigzagLevelOrder(root.right, result, level + 1);  }
0 0
原创粉丝点击