二叉树层序遍历时可以记录层的信息,关键在于开始遍历之前,先记录一下本层要遍历多少个节点。while 循环第一件事记录本层节点数量,然后用 for 循环遍历这么多次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
class Solution { public: vector<int> rightSideView(TreeNode* root) { if (!root) return {}; queue<TreeNode*> q; q.push(root); vector<int> ans; while (q.size()) { int cnt = q.size(); for (int i = 0; i < cnt; i++) { TreeNode* node = q.front(); q.pop(); if (node->left) q.push(node->left); if (node->right) q.push(node->right); if (i == cnt - 1) ans.push_back(node->val); } } return ans; } };
|