[LeetCode] 103. Binary Tree Zigzag Level Order Traversal

4541 단어
두 갈래 나무의 자형이 층층이 두루 다니다.제목은 두 갈래 나무를 층층이 훑어보는 것이지만 층층이 훑어볼 때 한 번은 왼쪽부터 한 번은 오른쪽부터 훑어보는 것이다.예,
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]
]

사고방식과 102문제의 방법 - 층층이 두루 돌아다니는 것과 다름없다. 유일하게 변수가 왼쪽에서 두루 다니는지 오른쪽에서 두루 다니는지 기록해야 한다.코드는 다음과 같습니다.
시간 O(n)
공간 O(n) - 레코드 output
 1 /**
 2  * @param {TreeNode} root
 3  * @return {number[][]}
 4  */
 5 var zigzagLevelOrder = function(root) {
 6     var res = [];
 7     if (root === null) return res;
 8     var queue = [];
 9     queue.push(root);
10     var x = true;
11     while (queue.length) {
12         var size = queue.length;
13         var list = [];
14         for (var i = 0; i < size; i++) {
15             var cur = queue.shift();
16             if (x) {
17                 list.push(cur.val);
18             } else {
19                 list.unshift(cur.val);
20             }
21             if (cur.left !== null) {
22                 queue.push(cur.left);
23             }
24             if (cur.right !== null) {
25                 queue.push(cur.right);
26             }
27         }
28         res.push(list);
29         x = !x;
30     }
31     return res;
32 };

좋은 웹페이지 즐겨찾기