1. 程式人生 > 實用技巧 >20201222 二叉樹的鋸齒形層序遍歷

20201222 二叉樹的鋸齒形層序遍歷

給定一個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。

例如:
給定二叉樹[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回鋸齒形層序遍歷如下:

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

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

publicList<List<Integer>>zigzagLevelOrder(TreeNoderoot){
}

  public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> ans = new LinkedList<List<Integer>>();
        if (root == null) {
            return ans;
        }

        Queue
<TreeNode> nodeQueue = new LinkedList<TreeNode>(); nodeQueue.offer(root); boolean isOrderLeft = true; while (!nodeQueue.isEmpty()) { Deque<Integer> levelList = new LinkedList<Integer>(); int size = nodeQueue.size();
for (int i = 0; i < size; ++i) { TreeNode curNode = nodeQueue.poll(); if (isOrderLeft) { levelList.offerLast(curNode.val); } else { levelList.offerFirst(curNode.val); } if (curNode.left != null) { nodeQueue.offer(curNode.left); } if (curNode.right != null) { nodeQueue.offer(curNode.right); } } ans.add(new LinkedList<Integer>(levelList)); isOrderLeft = !isOrderLeft; } return ans; }