p141 二叉树的 Z 字形遍历(leetcode 103)

Posted repinkply

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了p141 二叉树的 Z 字形遍历(leetcode 103)相关的知识,希望对你有一定的参考价值。

一:解题思路

Time:O(n),Space:O(n)

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
public:
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) 
    {
        vector<vector<int>> result;
        if (root == NULL) return result;
        bool right2Left = false;
        queue<TreeNode*> q;
        q.push(root);

        while (!q.empty())
        {
            int size = q.size();
            vector<int> elem;
            for (int i = 0; i < size; i++)
            {
                TreeNode* node = q.front();
                q.pop();
                elem.push_back(node->val);

                if (node->left != NULL) q.push(node->left);
                if (node->right != NULL) q.push(node->right);
            }

            if (right2Left) reverse(elem.begin(),elem.end());
            result.push_back(elem);
            right2Left = !right2Left;
        }

        return result;
    }
};

Java:

class Solution {
        public List<List<Integer>> zigzagLevelOrder(TreeNode root)
        {
               List<List<Integer>> result=new ArrayList<>();
               if(root==null) return result;
               boolean right2Left=false;
               Queue<TreeNode> q=new LinkedList<>();
               q.add(root);
               
               while (!q.isEmpty())
               {
                   int size=q.size();
                   List<Integer> elem=new ArrayList<>();
                   for(int i=0;i<size;i++)
                   {
                       TreeNode node=q.poll();
                       elem.add(node.val);
                       
                       if(node.left!=null)  q.add(node.left);
                       if(node.right!=null) q.add(node.right);
                   }
                   
                   if(right2Left) Collections.reverse(elem);
                   result.add(elem);
                   right2Left=!right2Left;
               }
               
               return result;
        }
    }

 

以上是关于p141 二叉树的 Z 字形遍历(leetcode 103)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树构建与遍历-LeetCode 103108109(二叉树的构建,层次遍历)

LeetCode 149. 直线上最多的点数 / NC14 二叉树的之字形层序遍历 / NC37 合并区间

二叉树的之字形层序遍历

LeetCode 1104. 二叉树寻路/103. 二叉树的锯齿形层序遍历/ 171. Excel表列序号/ 987. 二叉树的垂序遍历

之字形树遍历

二叉树的之字形层序遍历(NC14/考察次数Top21/难度中等)