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

バイナリツリーレベルトラバーサルiibinary -tree-level-order-traversal-ii

タイトル説明

バイナリツリーが与えられた場合、下から上へのトラバーサル(左から右へ、リーフノードからルートノードへ、レイヤーごとのトラバーサル)を返します
。例:
与えられたバイナリツリーは{3,9,20、#、 #、15,7}、
ここに画像の説明を挿入
二分木を下から上にトラバースした結果は
[
[15,7]、
[ 9,20 ]、
[3]
]です。

二分木が与えられた場合、そのノードの値のボトムアップレベルの順序トラバーサルを返します。(つまり、左から右へ、葉から根へとレベルごとに)。
例:
与えられた二分木{3,9,20、#、#、15,7}、

ここに画像の説明を挿入
ボトムアップレベルの順序トラバーサルを次のように返します。

[
[15,7]、[9,20]

[3]
]

問題解決のアイデア

  • 元の階層トラバーサルと比較すると、下から上への追加要件があるため、逆の順序を実現するには、各トラバーサルの後に結果の先頭までノードを挿入するだけで済みます(ヘッダー補間と同様)。
  • ベクトルの挿入:vt
    vt.insert(vt.begin(), x);の先頭に
    vt.insert(vt.begin() + 2, x);要素xを挿入します。vtvt[2]の3番目の位置に要素xを挿入します。
/**
 * 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