You need to find the largest value in each row of a binary tree.
Example:
Input: 1 / \ 3 2 / \ \ 5 3 9 Output: [1, 3, 9]
题目意思:找出每一行的最大值
解题思路:1.将当前行的结点放在一个数组中, 然后将当前行的下一行的所有结点放在另外一个数组中,这样可以遍历每一行的结点
2.当当前行的结点遍历完之后, 找出每一行的最大值
3.中止条件是当前行的结点个数为0
注意事项:
1.根结点可能为null
1 #include<queue> 2 #include<algorithm> 3 class Solution { 4 5 public: 6 static bool cmp(TreeNode* a, TreeNode* b){ 7 return a->val > b->val; 8 }//按照val的值升序排序 9 vector<int> largestValues(TreeNode* root) { 10 //p用来保存当前行的结点 11 vector<TreeNode*> p; 12 p.push_back(root); 13 //放入根节点的val,当根节点为null时,不放入 14 vector<int> ans; 15 if(root) ans.push_back(root->val); 16 //死循环。当当前行的下一行全为null的时候退出 17 while(true){ 18 vector<TreeNode*> q; 19 int len = p.size(); 20 //将当前行的所有结点的下一个结点放在q内 21 while(len){ 22 TreeNode* temp = p[len-1]; 23 if(temp == NULL) break; 24 len--; 25 if(temp->left) q.push_back(temp->left); 26 if(temp->right) q.push_back(temp->right); 27 } 28 p = q; 29 sort(q.begin(), q.end(), cmp); 30 if(p.empty()) break; 31 ans.push_back(q[0]->val); 32 } 33 return ans; 34 } 35 };