검지offer-지그재그 인쇄 두 갈래 나무
4303 단어 프로그래밍 문제
메서드 1, 계층 인쇄, 짝수 행 반전,
vector<vector<int>> Print(TreeNode* root)
{
queue q;
vector<vector<int> > V;
if(root==nullptr)return V;
q.push(root);
int even = 0;
while(!q.empty())
{
vector<int> tmp;//
int n = q.size();
while(n--)
{
root = q.front();
tmp.push_back(root->val);
if(root->left)q.push(root->left);
if(root->right)q.push(root->right);
q.pop();
}
if(even)
reverse(tmp.begin(), tmp.end());
even = !even;
V.push_back(tmp);
}
return V;
}
방법 2. 두 개의 창고로 서로 다른 층의 노드를 저장한다
한 층의 노드를 인쇄할 때 다음 층의 노드를 상응하는 창고에 저장합니다. 홀수층이라면 왼쪽 노드를 저장하고 오른쪽 노드를 첫 번째 창고에 저장합니다. 짝수층이면 오른쪽 노드를 저장하고 왼쪽 노드를 두 번째 창고에 저장합니다.
vector<vector<int>> Print(TreeNode* root)
{
vector<vector<int> > V;
if(root==nullptr)return V;
stack s1,s2; // s1, s2
s1.push(root);
while(!s1.empty()||!s2.empty())
{
if(!s1.empty())
{
vector<int> tmp;
while(!s1.empty())
{
TreeNode *root = s1.top();
s1.pop();
tmp.push_back(root->val);
if(root->left)s2.push(root->left);
if(root->right)s2.push(root->right);
}
V.push_back(tmp);
}
if(!s2.empty())
{
vector<int> tmp;
while(!s2.empty())
{
TreeNode *root = s2.top();
s2.pop();
tmp.push_back(root->val);
if(root->right)s1.push(root->right);//
if(root->left)s1.push(root->left);
}
V.push_back(tmp);
}
}
return V;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
검지offer-지그재그 인쇄 두 갈래 나무제목 설명은 함수를 지그재그로 인쇄하는 두 갈래 트리, 즉 첫 번째 줄은 왼쪽에서 오른쪽으로, 두 번째 줄은 오른쪽에서 왼쪽으로, 세 번째 줄은 왼쪽에서 오른쪽으로, 다른 줄은 이와 같이 인쇄합니다. 한 층의 노드를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.