검지 offer - 지그재그 순서로 두 갈래 나무 인쇄

3278 단어 필기시험

제목


지그재그 순서로 두 갈래 나무를 인쇄하다
시간제한: 1초 공간제한: 32768K 열도지수: 106091
제목 설명은 함수를 지그재그로 인쇄하는 두 갈래 트리, 즉 첫 번째 줄은 왼쪽에서 오른쪽으로, 두 번째 줄은 오른쪽에서 왼쪽으로, 세 번째 줄은 왼쪽에서 오른쪽으로, 다른 줄은 이와 같이 인쇄합니다.

해법


코드
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) 
    {
        vector<vector<int>> result;
        if(pRoot==NULL)
            return result;

        vector<int> current_layer;
        queue nodes;
        queue<bool> labels;
        bool current_label;
        TreeNode* current=NULL;

        current_label=true;
        labels.push(true);
        nodes.push(pRoot);
        while(!nodes.empty())
        {
            current=nodes.front();
            if(labels.front()==current_label)
            {
                current_layer.push_back(current->val);
            }
            else
            {
                if(current_label)
                    reverse(current_layer.begin(),current_layer.end());

                result.push_back(current_layer);
                current_layer.clear();
                current_layer.push_back(current->val);
                current_label=(!current_label);
            }

           if(current->right!=NULL)
           {
               nodes.push(current->right);
               labels.push(!labels.front());
           }
           if(current->left!=NULL)
           {
               nodes.push(current->left);
               labels.push(!labels.front());
           }


            nodes.pop();
            labels.pop();
        }
        if(!current_layer.empty())
        {
            if(current_label)
                reverse(current_layer.begin(),current_layer.end());

            result.push_back(current_layer);
        }

        return result;
    }
};

좋은 웹페이지 즐겨찾기