图(广度优先搜索)515. Find Largest Value in Each Tree Row[Middle]

来源:互联网 发布:php aes解密后有乱码 编辑:程序博客网 时间:2024/06/07 04:21

题目:

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]

找到二叉树每行最大的数。


分析:

第一眼看过去,题目要求一行一行找最大,自然想到 [bfs]:




不过课本上的bfs使用了queue来装节点,虽然一层一层地插入了,可是好像不能很明显地分出层次。如果解决了这个问题,接下来只要对每一层进行排序,选取最大数就好(可以用stl里的sort)。我的解决方法是,在遍历新的一层时,先把节点读到一个容器里,然后再转移到用来递归的容器。


代码:

/** * 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://bfs 递归,father是装遍历节点的容器,就是课本(博客上文图片)上的q,res装每一层的值 void addQueue(vector<vector<int> >&res, vector<TreeNode*>&father) {    //(1)    //father不空,还有节点未遍历 if (!father.empty()) { vector<TreeNode*> son; //装每一层的节点,然后转移给father vector<int> son2;  //装节点的值,转移到res while (!father.empty()) { TreeNode* fir = father.front(); if (fir->left != NULL) son.push_back(fir->left); if (fir->right != NULL) son.push_back(fir->right); father.erase(father.begin()); } vector<TreeNode*>::iterator it = son.begin();  //把节点值取出给son2 while (it != son.end()) { TreeNode* fir = *it; son2.push_back(fir->val); ++it; }                //(2) if(!son2.empty()) res.push_back(son2);        //son的节点转移到father,进行一次新的遍历 while (!son.empty()) { father.push_back(son.front()); son.erase(son.begin()); } addQueue(res, father); } }//为sort逆序排序提供的函数 static bool com(int a, int b) { return a > b; }//vector<int> largestValues(TreeNode* root) {     vector<vector<int> >res; vector<TreeNode*> father; vector<int> son2; if (root != NULL) { father.push_back(root); son2.push_back(root->val); res.push_back(son2); } addQueue(res, father); vector<int> hhh; for (int i = 0; i < res.size(); i++) { sort(res[i].begin(), res[i].end(),com); //(3) hhh.push_back(res[i].front()); }  return hhh;    }};




注释解释:

(1):bfs里用vector代替了queue,这是为了后面操作方便决定的,因为sort要输入容器迭代器来排序,但是queue没有

(2):

 if(!son2.empty())


这句是因为sort排序对象不能为空

(3)sort可以传递函数指针(代码中的com),关于函数指针和函数对象的具体用法参见:点击打开链接


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三星s8出现蓝框怎么办 三星手机短信图标没了怎么办 ps没有足够的ram怎么办 ps性能调不了是怎么办 苹果6p照相模糊怎么办 相框玻璃碎了怎么办 word文档加密后忘记密码怎么办 手机wps密码忘了怎么办 苹果手表忘了密码怎么办 苹果系统忘了密码怎么办 ps画板建小了怎么办 wps表格密码忘了怎么办 word文档变成虚的怎么办 wps论文中表格跨页怎么办 word文档复制过来有边框怎么办 wps表格跨页断开怎么办 锅的铆钉老是松怎么办 文胸不知道怎么染色了怎么办 未后的信息我该怎么办? 做leep手术后大出血怎么办 眼线笔出不了水怎么办 手机字体变成空心字怎么办 平安树树枝黑了怎么办 柳树被虫钻洞了怎么办 柳树叶子上有虫子怎么办 小金鱼翻肚皮了怎么办 秋天树叶没了小鸟怎么办 去国外旅游不会英语怎么办 橡皮树长了2米高怎么办 榕树盆景长的高怎么办? 2岁宝宝看书弯腰低头怎么办 excel表格打开很慢怎么办 3d模型有红线框怎么办 电视页面加载时错误怎么办 投屏显示加载视频错误怎么办 word遇到问题需要关闭怎么办 画眼线看不出来怎么办 14岁眼皮很松怎么办啊 ps存不了psd格式怎么办 花草上有白色物怎么办 ps抠出来有白边头发怎么办