来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

解答

普通的层级遍历,只是有两个注意点:

  1. 加个方向变量
  2. 逆序的时候需要从数组头部插入

    1. /**
    2. * Definition for a binary tree node.
    3. * function TreeNode(val, left, right) {
    4. * this.val = (val===undefined ? 0 : val)
    5. * this.left = (left===undefined ? null : left)
    6. * this.right = (right===undefined ? null : right)
    7. * }
    8. */
    9. /**
    10. * @param {TreeNode} root
    11. * @return {number[][]}
    12. */
    13. var zigzagLevelOrder = function(root) {
    14. if (!root) return [];
    15. let stack = [ root ],
    16. direction = 1,
    17. result = [];
    18. while (stack.length) {
    19. let temp = [], tempVal = [];
    20. if (direction) {
    21. for (let i = 0; i < stack.length; i++) {
    22. const node = stack[i];
    23. if (node) {
    24. tempVal.push(node.val);
    25. node.left && temp.push(node.left);
    26. node.right && temp.push(node.right);
    27. }
    28. }
    29. } else {
    30. for (let i = stack.length - 1; i >= 0; i--) {
    31. const node = stack[i];
    32. if (node) {
    33. tempVal.push(node.val);
    34. node.right && temp.unshift(node.right);
    35. node.left && temp.unshift(node.left);
    36. }
    37. }
    38. }
    39. direction = 1 - direction;
    40. stack = temp;
    41. result.push(tempVal);
    42. }
    43. return result;
    44. };