1. 程式人生 > 其它 >515 在每個樹行中找最大值

515 在每個樹行中找最大值

技術標籤:LeetCode

題目描述:
您需要在二叉樹的每一行中找到最大的值。

示例:
輸入:
在這裡插入圖片描述
輸出: [1, 3, 9]

方法1:
主要思路:解題彙總連結
(1)直接使用佇列實現對樹的層次遍歷,並在遍歷每層時,保留該層的最大值即可;

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution { public: vector<int> largestValues(TreeNode* root) { if(root==NULL){//處理特殊的情形 return {}; } queue<TreeNode*> q;//使用佇列實現層次遍歷 q.push(root);//初始化 vector<int> res;//儲存各層的最大值 while(!q.empty()){//終止條件 int size_cur=
q.size();//當前層的元素的個數 int max_cur=INT_MIN;//初始最大值 TreeNode* cur_node=NULL;//輔助變數 while(size_cur--){//遍歷當前層 cur_node=q.front();//獲得當前結點 q.pop(); max_cur=max_cur<cur_node->val?cur_node->val:max_cur;//判斷結點值是否更大 //將非空的子節點壓入到佇列中
if(cur_node->left){ q.push(cur_node->left); } if(cur_node->right){ q.push(cur_node->right); } } res.push_back(max_cur);//將當前層的最大值壓入結果中 } return res; } };