C++Leedcode107:二叉树的层次遍历II

前言
1、暴力解法。用栈做层次遍历,得到的结果是从root到最后一层的;再将二维数组进行逆着输出:从最后一行到第一行的顺序输出,列的顺序保持不变。注:这种方法,最后提交时,并没有按照逆着的方向输出,但是在VS上调试,结果是正确的。原因暂时不明~
2、待优化。

题目
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:
给定二叉树 [3,9,20,null,null,15,7],
在这里插入图片描述
返回其自底向上的层次遍历为:
在这里插入图片描述

实现方法
一、暴力解法

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        vector<int> res1;
        vector<vector<int> > res2;
        queue<TreeNode*> q;
        TreeNode* current=root;
        if(root) {
            res1.push_back(root->val);
            res2.push_back(res1);
            res1.clear();
        }
        while(current){
            if(current->left) {
                res1.push_back(current->left->val);
                q.push(current->left);
            }
            if(current->right) {
                res1.push_back(current->right->val);
                q.push(current->right);
            }
            if(!res1.empty()) {
                res2.push_back(res1);
                res1.clear();
            }      
            if(q.empty()) return res2;
            current=q.front();
            q.pop();           
        }
        //从低向上输出
        vector<int> v1;
        vector<vector<int>> v2;
        for(int i=res2.size()-1;i>=0;i--){            
            for(int j=0;j<res2.size();j++){
                v1.push_back(res2[i][j]);
            }
            v2.push_back(v1);
            v1.clear();
        }        
        return v2;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43434305/article/details/87711943
今日推荐