검지 32-3 위에서 아래로 두 갈래 나무 인쇄

6732 단어
함수는 지그재그 순서에 따라 두 갈래 트리를 인쇄합니다. 즉, 첫 번째 줄은 왼쪽에서 오른쪽으로, 두 번째 줄은 오른쪽에서 왼쪽으로, 세 번째 줄은 왼쪽에서 오른쪽으로 인쇄합니다. 다른 줄은 이와 같습니다.
 
예를 들어 두 갈래 나무를 주면[3,9,20,null,null,15,7],
3/\9 20/\15 7은 다음 단계를 반복합니다.
[ [3], [20,9], [15,7]]
 
이 문제는 지점별로 인쇄해야 하기 때문에 각 줄의 길이를 미리 기록해야 한다.지그재그를 원하기 때문에 짝수 줄과 홀수 줄을 각각 처리하는 창고가 2개 필요하다.현재 홀수 행(root는 첫 번째 줄로 간주)이면 왼쪽 트리를 눌러서 오른쪽 트리를 눌러줍니다.그렇지 않으면 먼저 오른쪽 나무를 눌러서 왼쪽 나무를 눌러라.
여기에는 even으로 홀수 줄인지 짝수 줄인지 표시하고stack 수조에 맞추면 코드를 간소화할 수 있습니다.
 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     vectorint>> levelOrder(TreeNode* root) {
13         if(root==nullptr)
14             return {};
15         vectorint>> ret;
16         vector<int> partial_ret;
17         stack stackTreenodes[2];
18         int even=1;
19         TreeNode* curptr=root;
20         stackTreenodes[1-even].push(curptr);
21         while(!stackTreenodes[1-even].empty()){
22             even=1-even;
23             int size=stackTreenodes[even].size();
24             while(size!=0){
25                 curptr=stackTreenodes[even].top();
26                 stackTreenodes[even].pop();
27                 size--;
28                 partial_ret.push_back(curptr->val);
29                 if(even){
30                     if(curptr->right!=nullptr)
31                         stackTreenodes[1-even].push(curptr->right);
32                     if(curptr->left!=nullptr)
33                         stackTreenodes[1-even].push(curptr->left);
34                 }
35                 else{
36                     if(curptr->left!=nullptr)
37                         stackTreenodes[1-even].push(curptr->left); 
38                     if(curptr->right!=nullptr)
39                         stackTreenodes[1-even].push(curptr->right);
40                 }
41             }
42             ret.push_back(partial_ret);
43             partial_ret.clear();
44         }
45         return ret;
46     }
47 };

좋은 웹페이지 즐겨찾기