二叉树的右视图
vector<int> rightSideView(TreeNode* root) { if (root == NULL) return {}; vector<int> res; queue<TreeNode *> q; q.push(root); while (!q.empty()) { int _size = q.size(); for (int i = 0; i < _size; i++) { TreeNode *cur = q.front(); q.pop(); if (cur->left) q.push(cur->left); if (cur->right) q.push(cur->right); if (i == (_size - 1)) res.push_back(cur->val); // 将每一层的最后一个元素放进res数组中 } } return res;}
二叉树的层平均值
vector<double> averageOfLevels(TreeNode* root) { if (root == NULL) return {}; vector<double> res; queue<TreeNode *> q; q.push(root); while (!q.empty()) { int _size = q.size(); double sum = 0; for (int i = 0; i < _size; i++) { TreeNode *cur = q.front(); q.pop(); sum += cur->val; // 每层的元素值相加 if (cur->left) q.push(cur->left); if (cur->right) q.push(cur->right); } res.push_back(sum / _size); } return res;}
N叉树的层序遍历
vector<vector<int>> levelOrder(Node* root) { if (root == NULL) return {}; vector<vector<int> > res; queue<Node *> q; q.push(root); while (!q.empty()) { int _size = q.size(); vector<int> tmp(_size); for (int i = 0; i < _size; i++) { Node *node = q.front(); q.pop(); tmp[i] = node->val; for (int i = 0; i < node->children.size(); i++) { // 将当前结点的各子结点放入队列中 if (node->children[i]) q.push(node->children[i]); } } res.push_back(tmp); } return res;}