[牛客网-Leetcode] #树 中等 binary-tree-level-order-traversal-ii

二叉树的层次遍历ii binary-tree-level-order-traversal-ii

题目描述

给定一个二叉树,返回该二叉树由底层到顶层的层序遍历,(从左向右,从叶子节点到根节点,一层一层的遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
在这里插入图片描述
该二叉树由底层到顶层层序遍历的结果是
[
[15,7],
[9,20],
[3]
]

Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree{3,9,20,#,#,15,7},

在这里插入图片描述
return its bottom-up level order traversal as:

[
[15,7],
[9,20],
[3]
]

解题思路

  • 和原来的层次遍历相比,多了个从底层到顶层的要求,那么只需要将每一层遍历后的节点插入到结果的开头(类似头插法),就可以实现逆序。
  • vector的插入:
    vt.insert(vt.begin(), x); 把元素x插入到vt的开头
    vt.insert(vt.begin() + 2, x); 把元素x插入到vt的第三个位置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
今日推荐