이진 트리 수준 순회 II 이진 트리 수준 순서 순회 II
제목 설명
이진 트리가 주어지면 아래에서 위로 이진 트리를 반환합니다 (왼쪽에서 오른쪽으로, 리프 노드에서 루트 노드로, 레이어별로 순회)
. 예 :
주어진 이진 트리는 {3,9,20, #, #, 15,7},
이진 트리를 맨 아래에서 맨 위로 이동 한 결과는
[
[15,7],
[9,20],
[3]
]입니다.
이진 트리가 주어지면 노드 값의 상향식 순서 순회를 반환합니다. (즉, 왼쪽에서 오른쪽으로, 잎에서 뿌리까지 수준별로).
예 :
주어진 이진 트리 {3,9,20, #, #, 15,7},
상향식 순서 순회를 다음과 같이 반환합니다.
[
[15,7],
[9,20],
[3]
]
문제 해결 아이디어
- 원래의 계층 적 순회와 비교할 때 아래쪽에서 위쪽으로 추가 요구 사항이 있으므로 역순을 달성하려면 각 순회 후 결과의 시작 부분 (헤더 보간과 유사)까지 노드를 삽입하면됩니다.
- 벡터
vt.insert(vt.begin(), x);
삽입 :
vt.insert(vt.begin() + 2, x);
vt 의 시작 부분에 요소 x 삽입 vt의 세 번째 위치에 요소 x 삽입 vt [2]
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode* root) {
vector<vector<int> > res;
if(root == NULL) return res;
queue<TreeNode*> myque;
myque.push(root);
while(!myque.empty()) {
int size = myque.size();
vector<int> cur; //记录当前层的节点
for(int i = 0; i < size; i ++) {
TreeNode* temp = myque.front();
myque.pop();
cur.push_back(temp -> val);
if(temp -> left) myque.push(temp -> left);
if(temp -> right) myque.push(temp -> right);
}
//由于是底层到顶层,所以每次插入到开头
res.insert(res.begin(), cur);
}
return res;
}
};