Descripción del título
Necesita encontrar el valor más grande en cada fila del árbol binario.
Ejemplos:
输入:
1
/ \
3 2
/ \ \
5 3 9
输出: [1, 3, 9]
Enlace del título: https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/
Ideas
Este problema es el recorrido jerárquico del árbol binario , y el valor máximo se puede registrar al atravesar cada capa. El código es el siguiente:
/**
* 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<int> largestValues(TreeNode* root) {
if(root==nullptr) return {};
vector<int> ans;
queue<TreeNode*> q;
q.push(root);
int curLevelNums = 1; // 当前层的节点数
int nextLevelNums = 0; // 下一层的节点数
int curMax = 0x80000000;
int cur = root->val;
while(!q.empty()){
TreeNode* curNode = q.front(); q.pop();
curLevelNums--;
cur = curNode->val;
curMax = max(curMax, cur);
if(curNode->left!=nullptr){
q.push(curNode->left);
nextLevelNums++;
}
if(curNode->right!=nullptr){
q.push(curNode->right);
nextLevelNums++;
}
if(curLevelNums==0){
curLevelNums = nextLevelNums;
nextLevelNums = 0;
ans.push_back(curMax);
curMax = 0x80000000;
}
}
return ans;
}
};
- Complejidad de tiempo: O (n)
n es el número de nodos en el árbol. - Complejidad del espacio: O (m + h)
m es el número máximo de nodos en cada capa, y h es la altura del árbol.