STL deque 양단 대기열 해결'자형 인쇄 트리

7279 단어
leetcode에서 문제를 쓸 때'지'자형 인쇄 두 갈래 나무를 만났는데 Z자형이라고 할 수 있다. 문제를 푸는 방법에서 deque 양단 대기열의 사용을 만나 한층 더 배웠다.
deque와 vector 유사
기본 초기화는 소개하지 않고 블로그를 참고할 수 있다https://www.cnblogs.com/linuxAndMcu/p/10260124.html
용기 최대 용량 deq.max_size();
 
요소 추가:
  • 머리에 요소 추가:deq.push_front(const T& x);
  • 말미 첨가원소:deq.push_back(const T& x);
  • 임의의 위치에 요소 삽입:deq.insert(iterator it, const T& x);//
  • n개의 동일한 요소를 임의의 위치에 삽입합니다deq.insert(iterator it, int n, const T& x);
  • 다른 벡터의 [forst,last] 사이의 데이터를 삽입합니다deq.insert(iterator it, iterator first, iterator last);
  •    int nums[]={1,2,3,4,5};
        deque<int>deq(nums,nums+5);// 
    
        
        
        deq.push_front(6);//6,1,2,3,4,5
        deque<int>::iterator iter = deq.begin();
        deq.insert(iter,7);//7,6,1,2,3,4,5  7
    
        iter = deq.begin();// , insert , 
        deq.insert(iter,2,6);//iter 6   6,6,7,6,1,...
    
    
        deque<int>deq2(2,9);// deque  9
        iter = deq.begin();
        deq.insert(iter,deq2.begin(),deq2.end());//deq2 deq   9,9,6,6,7...
        
        for(deque<int>::iterator iter= deq.begin();iter!=deq.end();iter++)
        {
            cout<" ";
            
        }

    위의 문장에서 교체기가 효력을 상실합니다. insert와erase에서 조작하면 삭제점과 삽입점 이후의 요소가 위치를 옮기기 때문에 삽입점과 삭제된 교체기는 모두 효력을 상실합니다.
     
    요소 삭제 및 삽입과 유사
  • 머리 삭제:deq.pop_front();
  • 끝부분 삭제:deq.pop_back();
  • 임의의 위치 요소 삭제:deq.erase(iterator it);
  • [first,last] 사이의 요소를 삭제합니다deq.erase(iterator first, iterator last);
  • 모든 요소 비우기:deq.clear();

  • 요소 액세스
    deq[5] 아래 첨자 접근
    at 메서드 액세스:deq.at(1);//이상의 두 가지 차이는at가 경계를 넘었는지 검사하는 것이고, out of range 이상을 던지는 것이다.
      deq.front();첫 번째 액세스
      deq.back();마지막 액세스
    기타
      deq.assign(3,1)//초기화 3개 1
      deq.swap(deq2)/deq와 deq2의 값을 교환합니다
    교체기
      deq.rbegin ()//마지막 원소를 가리키는 교체기
      deq.rend()//시작을 가리키는 교체기 반환
      deq.cbegin ()//상량 교체기, 이 값을 변경할 수 없습니다, deq.cend() 동리
     
    leetcode 문제로 돌아가는 지그재그 프린트 트리
    class Solution {
    public:
        vectorint>> levelOrder(TreeNode* root) {
            vectorint>> res;
            if (root==NULL)
                return res;
            bool flag = true; // true, false
            deque q;
            q.push_back(root);
            while (!q.empty())
            {
                int n = q.size();
                vector<int> out;
                TreeNode* node;
                while (n>0)
                {
                    if (flag) //  : , , 
                    {
                        node = q.front();
                        q.pop_front();
                        if (node->left)
                            q.push_back(node->left);  //  
                        if (node->right)
                            q.push_back(node->right);
                    }
                    else  // :  , , 
                    {
                        node = q.back();
                        q.pop_back();
                        if (node->right)
                            q.push_front(node->right);  //  
                        if (node->left)
                            q.push_front(node->left);
                    }
                    out.push_back(node->val);
                    n--;
                }
                flag = !flag;
                res.push_back(out);
            }
            return res;
        }
    };

    bfs+양단 대기열 해결
    flag 변수를 설정하고 그 값을 통해 정방향 또는 역방향 값을 판단합니다

    좋은 웹페이지 즐겨찾기