leetcode 브러시 6.16 트리의 층차 반복, 트리의 서열화
3933 단어 데이터 구조와 알고리즘
예: 두 갈래 나무:[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));
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 깊이가 두루 다니다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.