- 题目:https://www.nowcoder.com/practice/d8566e765c8142b78438c133822b5118?tpId=46&tqId=29071&tPage=3&rp=3&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking
- 思路:
- 这个题目的主要思路就是利用队列来进行解决。从顶部到尾部,对每一层将每一层的节点放入队列中,然后在这一层中将队列中的每个节点保存在一个vector中,并且判断这个节点是否有左右子节点,将他们放入队列(这样就将下一层的所有节点放入了队列中),依次处理每一层。然后将每一层的vector'放入二维数组中即可。
- 这个题目的主要思路就是利用队列来进行解决。从顶部到尾部,对每一层将每一层的节点放入队列中,然后在这一层中将队列中的每个节点保存在一个vector中,并且判断这个节点是否有左右子节点,将他们放入队列(这样就将下一层的所有节点放入了队列中),依次处理每一层。然后将每一层的vector'放入二维数组中即可。
- 代码
/** * Definition for binary tree * 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) { int depth = Depth(root); vector <vector<int> > bottom; if (root == NULL) return bottom; deque <TreeNode *> dq; dq.push_back(root); /* 这里是利用队列来进行存储每一行的节点,进队列出队列,主要思路就是利用当前的遍历到当前节点,就讲它的左右子节点 进入队列,然后再将这一个队列的当前行的元素进入vector中然后在进入二维数组中 */ while (!dq.empty()){ int low = 0; int high = dq.size();//计算当前队列中元素的个数,这个就是每一行的元素个数 vector<int> tmp; while (low++ < high){ TreeNode *cur = dq.front(); dq.pop_front(); tmp.push_back(cur->val); if (cur->left) dq.push_back(cur->left); if (cur->right) dq.push_back(cur->right); } bottom.push_back(tmp); } reverse(bottom.begin(), bottom.end());//翻转函数,实现翻转 return bottom; } //计算树的深度函数 int Depth(TreeNode *root){ if (root == NULL) return 0; int left = left + Depth(root->left); int right = right + Depth(root->right); return left>right?left:right; } };
转载于:https://www.cnblogs.com/Kobe10/p/6341279.html