首页 » 编程之美 » 正文

[leetcode_103]Binary Tree Zigzag Level Order Traversal

序列化二叉树,但是行输出时从左到右从右到左交替进行。

class Solution {
public:
    enum Direciton {left,right};
    vector&lt;vector&lt;int&gt; &gt; zigzagLevelOrder(TreeNode <em>root) {
        vector&lt;vector&lt;int&gt;&gt; result;
        result.clear();
        vector&lt;TreeNode</em>&gt; seq,seq_c;
        seq.clear();
        if(root != NULL)seq.push_back(root);
        Direciton direction = left;
        while(seq.size() &gt; 0) {
            seq_c.clear();
            vector&lt;int&gt;item;
            item.clear();
            if(direction == left) {
                direction = right;
                for(int i = 0; i &lt; seq.size();i++) {
                    item.push_back(seq[i]-&gt;val);
                    if(seq[i]-&gt;left != NULL) {
                        seq_c.push_back(seq[i]-&gt;left);
                    }
                    if(seq[i]-&gt;right != NULL) {
                        seq_c.push_back(seq[i]-&gt;right);
                    }
                }
            }
            else {
                direction = left;
                for(int i = seq.size()-1; i &gt;= 0;i--) {
                    item.push_back(seq[i]-&gt;val);
                }
                for(int i = 0; i &lt; seq.size();i++) {
                    if(seq[i]-&gt;left != NULL) {
                        seq_c.push_back(seq[i]-&gt;left);
                    }
                    if(seq[i]-&gt;right != NULL) {
                        seq_c.push_back(seq[i]-&gt;right);
                    }
                }
            }
            result.push_back(item);
            seq = seq_c;
        }
        return result;
    }
};

发表评论