[LeetCode]107. Binary Tree Level Order Traversal II

来源:互联网 发布:java批量上传文件 编辑:程序博客网 时间:2024/05/20 18:20

[LeetCode]107. Binary Tree Level Order Traversal II

题目描述

这里写图片描述

思路

BFS和DFS均可
BFS需要保存当前level中节点的个数
详见代码

代码

#include <iostream>#include <vector>#include <queue>#include <algorithm>using namespace std;struct TreeNode {    int val;    TreeNode* left;    TreeNode* right;    TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public:    /*    //BFS    vector<vector<int>> levelOrderBottom(TreeNode* root) {        vector<vector<int>> res;        if (root == NULL)            return res;        queue<TreeNode*> q;        int count = 0;        res.push_back({ root->val });        if (root->left || root->right) {            count = 1;            q.push(root);        }        while (q.size()) {            int temp = 0;            vector<int> level;            while (count--) {                TreeNode* node = q.front();                q.pop();                if (node->left) {                    ++temp;                    level.push_back(node->left->val);                    q.push(node->left);                }                if (node->right) {                    ++temp;                    level.push_back(node->right->val);                    q.push(node->right);                }            }            if(level.size())                res.push_back(level);            count = temp;        }        reverse(res.begin(), res.end());        return res;    }    */    //DFS    vector<vector<int>> levelOrderBottom(TreeNode* root, int level = 0) {        DFS(root, 0);        reverse(res.begin(), res.end());        return res;    }    void DFS(TreeNode* root, int level) {        if (root == NULL)            return;        if (level == res.size())            res.push_back({});        res[level].push_back(root->val);        DFS(root->left, level + 1);        DFS(root->right, level + 1);    }private:    vector<vector<int>> res;};int main() {    TreeNode* node1 = new TreeNode(3);    TreeNode* node2 = new TreeNode(9);    TreeNode* node3 = new TreeNode(20);    TreeNode* node4 = new TreeNode(15);    TreeNode* node5 = new TreeNode(7);    node1->left = node2;    node1->right = node3;    node3->left = node4;    node3->right = node5;    vector<vector<int>> res;    Solution s;    res = s.levelOrderBottom(node1);    for (auto p : res) {        for (auto q : p) {            cout << q << " ";        }        cout << endl;    }    system("pause");    return 0;}
0 0