当前位置: 首页 > news >正文

成都公司展厅设计公司百度手机网站优化

成都公司展厅设计公司,百度手机网站优化,苗木网站开发需求,推广策略研究一、基本层次遍历问题 1.二叉树的层次遍历 思路&#xff1a;使用队列可以很好的保存遍历状态&#xff0c;出队将结点左右子结点入队&#xff0c;用size记录下一层的元素个数&#xff0c;这样就能区分出层了 class Solution {public List<List<Integer>> levelOr…

一、基本层次遍历问题

1.二叉树的层次遍历

思路:使用队列可以很好的保存遍历状态,出队将结点左右子结点入队,用size记录下一层的元素个数,这样就能区分出层了 

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if(root == null){return new LinkedList<>();}List<List<Integer>> res = new LinkedList<>();LinkedList<TreeNode> queue = new LinkedList<>();queue.addFirst(root);while(!queue.isEmpty()){int size = queue.size();LinkedList<Integer> list = new LinkedList<>();while(size>0){TreeNode node = queue.remove();list.addLast(node.val);if(node.left != null){queue.addLast(node.left);}if(node.right != null){queue.addLast(node.right);}size--;}res.add(list);}return res;}
}

2.二叉树的层次遍历II

 思路:此题和上一题大同小异,只需要在添加结果集的时候头插法就可以了。

class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {if(root == null){return new LinkedList<>();}List<List<Integer>> res = new LinkedList<>();LinkedList<TreeNode> queue = new LinkedList<>();queue.add(root);while(!queue.isEmpty()){int size = queue.size();List<Integer> list = new LinkedList<>();while(size>0){TreeNode node = queue.removeFirst();size--;list.add(node.val);if(node.left!= null){queue.add(node.left);}if(node.right!= null){queue.add(node.right);}}res.add(0,list);}return res;}
}

3.锯齿形遍历 

思路:和层次遍历不同的是每层顺序奇偶方向交替,用一个变量记录当前层的变量规则,从左往右就是尾插法,从右往左就是头插法

class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {if(root == null){return new LinkedList<>();}List<List<Integer>> res = new LinkedList<>();LinkedList<TreeNode> queue = new LinkedList<>();queue.add(root);int loop = 1;while(!queue.isEmpty()){int size = queue.size();LinkedList<Integer> list = new LinkedList<>();for(int i = 0;i<size;i++){TreeNode node = queue.removeFirst();if(node.left!= null){queue.add(node.left);}   if(node.right!= null){queue.add(node.right);}if(loop%2==0){list.addFirst(node.val);}else{list.add(node.val);}}res.add(list);loop++;}return res;}
}

4.N叉树的层次遍历

 思路:此题和基本层次遍历不同的是,每次不是添加左右孩子入队而是添加孩子列表入队,把添加左右孩子替换成遍历添加列表就成。

class Solution {public List<List<Integer>> levelOrder(Node root) {if(root == null){return new LinkedList<>();}List<List<Integer>> res = new LinkedList<>();LinkedList<Node> queue = new LinkedList<>();queue.addFirst(root);while(!queue.isEmpty()){int size = queue.size();LinkedList<Integer> list = new LinkedList<>();while(size>0){Node node = queue.remove();list.addLast(node.val);for(Node child : node.children){queue.add(child);}size--;}res.add(list);}return res;}
}

二、处理每层元素的问题

1.在每个树行中找最大值

思路:还是和遍历大同小异,现在不是将所有子结点都加入结果,只取每层最大的,比较一下就行

class Solution {public List<Integer> largestValues(TreeNode root) {if(root == null){return new LinkedList<>();}List<Integer> res = new LinkedList<>();LinkedList<TreeNode> queue = new LinkedList<>();queue.addFirst(root);while(!queue.isEmpty()){int size = queue.size();int max = Integer.MIN_VALUE;while(size>0){TreeNode node = queue.remove();if(node.val>max){max = node.val;}if(node.left != null){queue.addLast(node.left);}if(node.right != null){queue.addLast(node.right);}size--;}res.add(max);}return res;}
}

 2.每个树行的平均值

 思路:和上一题找最大值没什么差别,每层相加除以size就可以。

class Solution {public List<Double> averageOfLevels(TreeNode root) {if(root == null){return new LinkedList<>();}List<Double> res = new LinkedList<>();LinkedList<TreeNode> queue = new LinkedList<>();queue.addFirst(root);while(!queue.isEmpty()){int size = queue.size();Double mean = 0.0;for(int i = 0;i<size;i++){TreeNode node = queue.remove();mean += node.val;if(node.left != null){queue.addLast(node.left);}if(node.right != null){queue.addLast(node.right);}}res.add(mean/size);}return res;}
}

3.二叉树的右视图

思路:层次遍历,最后一个元素加入结果集就行。 

class Solution {public List<Integer> rightSideView(TreeNode root) {if(root == null){return new LinkedList<>();}List<Integer> res = new LinkedList<>();LinkedList<TreeNode> queue = new LinkedList<>();queue.addFirst(root);while(!queue.isEmpty()){int size = queue.size();TreeNode node = root;while(size>0){node = queue.remove();if(node.left != null){queue.addLast(node.left);}if(node.right != null){queue.addLast(node.right);}size--;}res.add(node.val);}return res;}
}

4.找树最小角的值

思路:1)层次遍历,记录下每层第一个元素

2)从右往左层次遍历,最后一个元素

//方法一
class Solution {public int findBottomLeftValue(TreeNode root) {if(root == null){return -1;}int res = -1;LinkedList<TreeNode> queue = new LinkedList<>();queue.add(root);while(queue.size()>0){int size = queue.size();res = queue.get(0).val;while(size>0){TreeNode node = queue.remove();size--;if(node.left != null){queue.add(node.left);}if(node.right != null){queue.add(node.right);}}}return res;}
}//方法二
class Solution {public int findBottomLeftValue(TreeNode root) {if(root == null){return -1;}int res = -1;Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty()){TreeNode node = queue.poll();res = node.val;if(node.right != null){queue.offer(node.right);}   if(node.left != null){queue.offer(node.left);}}return res;}
}

http://www.yayakq.cn/news/499544/

相关文章:

  • php源码网站修改网上商城购物系统流程图
  • 专业网站建设机构做网站怎样找
  • 宽屏网站模板怎么开网店不用自己发货囤货的
  • 云服务器建站密云网站建设服务
  • 网站制作技术培训软件商店应用
  • 织梦网站怎样做子域名企业网站建设方案效果
  • 移动终端网站建设h5网站建设模板下载
  • 网站地图如何更新青岛正规网站设计公司
  • 西安网站设计方案做信息网站怎么赚钱
  • 高清网站建设的好处wordpress 虚拟商品插件
  • 网站开发后端做那些界面设计职业技能等级证书
  • 网站砍价活动怎么做科技绘画作品图片大全
  • 新都网站建设网站建设刂搜金手指下拉二五
  • 营销网站制作平台有哪些公司网站建设情况说明书
  • 为什么要找对做网站的公司武山县建设局网站
  • 如何建设自己的网站 知乎个人开发app去哪里接广告
  • 猎头做单的网站郑州专业制作网站多少钱
  • 网站实名制查询公司网站建设的视频教程
  • 自营购物网站建设优秀的vi设计手册
  • 黑龙江省中国建设银行网站首页个人类网站有哪些
  • 又名林州站长网hao123网址大全浏览器设为主页
  • 个人cms网站网络页面设计公司
  • 哪些大型网站用mysql网站建设的系统简介
  • 郑州专业网站建设价格网站的权限管理怎么做
  • 哈尔滨做网站巨耀公司重庆做网络优化公司电话
  • 湖南长信建设集团网站无锡信息网招聘
  • 奇信建设集团官方网站护理专业主要学什么
  • 银行网站 设计方案搜索引擎优化文献
  • 渭南免费做网站百度一下你就知道123
  • 网站引入视频播放wordpress全站链接