leetcode 브러시 6.16 트리의 층차 반복, 트리의 서열화

두 갈래 나무를 드리겠습니다. 층순으로 훑어보는 노드 값을 되돌려 주십시오.(즉, 왼쪽에서 오른쪽으로 모든 노드에 층층이 접근한다.)
예: 두 갈래 나무:[3,9,20,null,null,15,7],
3/\9 20/\15 7은 다음 단계를 반복합니다.
[   [3],   [9,20],   [15,7] ]
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector> levelOrder(TreeNode* root) 
    {
        vector> res;
        vector cur;
        if(root ==NULL) return res;
        queue que;
        que.push(root);
        int len = 0; 
        while(!que.empty())
        {
            len = que.size();
            for(int i=0;ival);
                if(p1->left) que.push(p1->left);
                if(p1->right) que.push(p1->right);
            }
            res.push_back(cur);
            cur.clear();
        }
        return res;
    }
};

 
 
 
297. 두 갈래 나무의 서열화와 반서열화
난이도 어려움 252 소장 공유 영어 관심 피드백으로 전환
서열화는 하나의 데이터 구조나 대상을 연속적인 비트비트로 바꾸는 작업으로 변환된 데이터를 한 파일이나 메모리에 저장할 수 있을 뿐만 아니라 네트워크를 통해 다른 컴퓨터 환경으로 전송할 수 있으며 상반된 방식으로 원수 근거를 재구성할 수 있다.
두 갈래 트리의 서열화와 반서열화를 실현하는 알고리즘을 설계해 주십시오.이것은 당신의 서열/반서열화 알고리즘의 실행 논리를 제한하지 않습니다. 두 갈래 트리가 하나의 문자열로 서열화되고 이 문자열을 원시적인 트리 구조로 반서열화할 수 있음을 보증하기만 하면 됩니다.
예:
 :

    1
   / \
  2   3
     / \
    4   5

  "[1,2,3,null,null,4,5]"

LeetCode ,  LeetCode 。 , 。

/ / , 。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Codec {
public:

    // Encodes a tree to a single string.
    string serialize(TreeNode* root) {
        queue qu;// , 
        qu.push(root);
        string res ="";
        while(!qu.empty())
        {
            auto p1 = qu.front();
            qu.pop();
            if(p1 != NULL)
            {
                res += to_string(p1->val);
                res += ",";
                qu.push(p1->left);
                qu.push(p1->right);
            }else{
                res += "null,";
            }  
        }
        return res;
    }

    // Decodes your encoded data to tree.
    TreeNode* deserialize(string data) 
    {
        if(data.empty()) return NULL;
        auto values = split(data);
        queue qu;
        if(values[0] == "null") return NULL;
        qu.push(new TreeNode(stoi(values[0])));
        TreeNode * res = qu.front();
        for(int i=1;ileft = p1;
            }
            ++i;
            if(values[i]!="null")
            {
                auto p2 = new TreeNode(stoi(values[i]));
                qu.push(p2);
                qu.front()->right = p2;
            }
            ++i;
            qu.pop();   
        }
        return res;
        
    }

    vector split(string &str)
    {
        int start = 0;
        vector res;
        //if(str.empty())
        while(1)
        {
            auto end = str.find(",",start);
            if(end == string::npos) break;
            res.push_back(str.substr(start,end-start));
            start = end+1;
        }
        return move(res);
    }
};

// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.deserialize(codec.serialize(root));

 

좋은 웹페이지 즐겨찾기