검지 offer 지그재그 인쇄 두 갈래 나무
10135 단어 검지offer
1. 문제 설명
제목: 함수는 지그재그 순서에 따라 두 갈래 트리를 인쇄합니다. 즉, 첫 번째 줄은 왼쪽에서 오른쪽으로 인쇄하고, 두 번째 줄은 오른쪽에서 왼쪽으로 인쇄하고, 세 번째 줄은 왼쪽에서 오른쪽으로 인쇄합니다. 다른 줄은 이와 같습니다.
2. 분석
앞에는 지점을 인쇄 두 갈래 나무로 나누어 여기가 지그재그로 되어 있다는 것을 설명한다.예:
// 8
// 4 12
// 2 6 10 14
// 1 3 5 7 9 11 13 15
인쇄 결과는 다음과 같습니다.
8
12 4
2 6 10 14
15 13 11 9 7 5 3 1
따라서 우리는 노드의 짝짓기를 주의해야 한다. 두 개의 창고를 사용하여 현재 층의 노드와 다음 층의 노드를 각각 저장해야 한다.
3. 소스 코드:
vector<vector<int> > Print(TreeNode* pRoot)
{
vector<vector<int> > results;
if(pRoot == NULL)
return results;
// 1pop()
stack<TreeNode*> stack1;
// 2pop()
stack<TreeNode*> stack2;
stack1.push(pRoot);
// ,
while(!stack1.empty() || !stack2.empty())
{
// 1 pop() vector , , push 2
if(!stack1.empty())
{
vector<int> res;
while(!stack1.empty())
{
TreeNode* pNode = stack1.top();
stack1.pop();
res.push_back(pNode->val);
if(pNode->left != NULL)
stack2.push(pNode->left);
if(pNode->right != NULL)
stack2.push(pNode->right);
}
results.push_back(res);
}
// 2 pop() vector , , push 1
else if(!stack2.empty())
{
vector<int> res;
while(!stack2.empty())
{
TreeNode* pNode = stack2.top();
stack2.pop();
res.push_back(pNode->val);
if(pNode->right != NULL)
stack1.push(pNode->right);
if(pNode->left != NULL)
stack1.push(pNode->left);
}
results.push_back(res);
}
}
return results;
}
4. 결론
지그재그가 두루 돌아다니는 것은 매우 복잡하다. 우리는 예를 들어 구체적으로 분석해야만 방법과 규칙을 찾을 수 있다.예를 들어 두 개의 창고를 찾으려면 두 개의 창고를 찾으면 서로 교환해야 한다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
20200326 - 검지offer 면접문제 27: 두 갈래 나무의 거울이솔 위 안에 28문제의 답안이 있는데 어떻게 꼬치는지 모르겠다.간단해....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.