[牛 客 网 -Leetcode] # 树 zhongbinary-tree-level-order-traversal-ii

이진 트리 수준 순회 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;
    }
};

추천

출처blog.csdn.net/cys975900334/article/details/107007685