LeetCode之Binary Tree Level Order Traversal II

来源:互联网 发布:php use和include区别 编辑:程序博客网 时间:2024/06/03 20:19

本题的目标是对于一个由整数组成的二叉树,从底向上逐层将每层的整数输出出来,每层的整数表示为一个整数数组。我使用广度优先搜索算法(BFS)来解决这个问题。如果二叉树为空,则返回的vector也为空;否则,从根节点开始,每次从左至右遍历完二叉树的一层,就将这些整数按顺序存储在一个数组中,并且将所有与该层节点连接的下一层节点存储起来,不断循环地从上层往下层走,直到遍历完最底层;最后,将得到的这些整数数组倒序输出,就得到了结果。

/** * 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<vector<int>> result;if (root == NULL) {return result;} else {vector<int> a;vector<TreeNode*> b;vector<vector<TreeNode*>> c;a.push_back(root -> val);result.push_back(a);b.push_back(root);c.push_back(b);for (int j = 0; j < c.size(); ++j) {vector<TreeNode*> nextLevel;for (int i = 0; i < c[j].size(); ++i) {if (c[j][i] -> left != NULL) {nextLevel.push_back(c[j][i] -> left);}if (c[j][i] -> right != NULL) {nextLevel.push_back(c[j][i] -> right);}}if (nextLevel.size() == 0) {break;}c.push_back(nextLevel);vector<int> next;for (int i = 0; i < nextLevel.size(); ++i) {next.push_back(nextLevel[i] -> val);}result.push_back(next);}vector<vector<int>> reverse;for (int i = result.size() - 1; i >= 0; --i) {reverse.push_back(result[i]);}return reverse;}    }};


0 0
原创粉丝点击