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

设计品牌网站免费软文网站

设计品牌网站,免费软文网站,网站建设 制作教程,广西 网站建设一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照从 左 到 右 的顺序返回每一层彩灯编号。 示例 1: 输入:root [8,17,21,18,null,null,6] 输出:[8,17,21,18,6] LCR 149. 彩灯装饰记录 I - 力扣&…

一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照从  到  的顺序返回每一层彩灯编号。

示例 1:

输入:root = [8,17,21,18,null,null,6]
输出:[8,17,21,18,6]

LCR 149. 彩灯装饰记录 I - 力扣(LeetCode) 

经典树的层次遍历

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int[] decorateRecord(TreeNode root) {if (root == null) {return new int[0]; // 如果根节点为 null,返回空数组}Queue<TreeNode> queue = new ArrayDeque<>();TreeNode p = root;queue.offer(root);List<Integer> resultList = new ArrayList<>(); // 使用 List 存储结果while(!queue.isEmpty()){if (p.left != null) {queue.offer(p.left);}if (p.right != null) {queue.offer(p.right);}queue.poll();resultList.add(p.val); p = queue.peek();}int[] result = new int[resultList.size()];for (int i = 0; i < resultList.size(); i++) {result[i] = resultList.get(i);}return result;}
}

拓展题目

LCR 150. 彩灯装饰记录 II - 力扣(LeetCode)

这个题目就不是简单的层次遍历了,需要记录层数了。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> decorateRecord(TreeNode root) {List<List<Integer>> resultList = new ArrayList<>();if (root == null) {return resultList; // 如果根节点为 null,返回空数组}Queue<TreeNode> queue = new ArrayDeque<>();queue.offer(root);while(!queue.isEmpty()){List<Integer> result = new ArrayList<>(); // 存储每层的节点int levelSize = queue.size(); // 当前层的节点个数for(int i = 0; i < levelSize; i++){TreeNode p = queue.poll(); // 取出队头节点result.add(p.val); // 将节点值加入当前层的结果if (p.left != null) {queue.offer(p.left);}if (p.right != null) {queue.offer(p.right);}}resultList.add(result);}return resultList;}
}

这个题目是层次遍历的另一种写法,我建议记这种,因为涉及需要跟层数相关的时候好操作。

为什么这样能保证在队列里的元素就是一层的元素呢。因为我们在上一次循环的过程中就已经保证下一层所有节点加入到队列了。我们在for循环中把上一层的节点全部去除,那么在每一次while循环开始前队列的长度就是每层的长度。

拓展题目

LCR 151. 彩灯装饰记录 III - 力扣(LeetCode)

这个题目跟上面那个差不多,就是要之字形输出。

 

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> decorateRecord(TreeNode root) {List<List<Integer>> result = new ArrayList<>();if (root == null) {return result; // 如果根节点为 null,返回空数组}Queue<TreeNode> queue = new ArrayDeque<>();queue.offer(root);int level = 1;while (!queue.isEmpty()) {int levelSize = queue.size(); // 当前层的节点List<Integer> currentLevel = new ArrayList<>(); // 存储当前层的节点值// 遍历当前层的所有节点for (int i = 0; i < levelSize; i++) {TreeNode currentNode = queue.poll(); // 取出队头节点currentLevel.add(currentNode.val); // 将节点值加入当前层的结果// 将左右子节点加入队列if (currentNode.left != null) {queue.offer(currentNode.left);}if (currentNode.right != null) {queue.offer(currentNode.right);}}// 将当前层的结果加入最终结果if(level % 2 != 0){result.add(currentLevel);} else{Stack<Integer> stack = new Stack<>();for(int num : currentLevel){stack.add(num);}List<Integer> currentLevel2 = new ArrayList<>(); // 存储当前层的节点值逆向while(!stack.isEmpty()){currentLevel2.add(stack.pop());}result.add(currentLevel2);}level++;}return result;}
}

或者我们直接用LinkedList双端队列,两边都可以进出,只用在偶数的时候插到另一边就行:

class Solution {public List<List<Integer>> decorateRecord(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();List<List<Integer>> res = new ArrayList<>();if(root != null) queue.add(root);while(!queue.isEmpty()) {LinkedList<Integer> tmp = new LinkedList<>();for(int i = queue.size(); i > 0; i--) {TreeNode node = queue.poll();if(res.size() % 2 == 0) tmp.addLast(node.val);else tmp.addFirst(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}res.add(tmp);}return res;}
}

http://www.dtcms.com/wzjs/340876.html

相关文章:

  • wordpress frbr济南seo优化
  • 做网站都需要什么步骤如何建立自己的网站
  • 怎样做商城手机网站企业网站推广注意事项
  • 做网站_你的出路在哪里无锡百度竞价推广
  • 特色的佛山网站建设全网营销课程
  • 上传文档到网站上怎么做品牌推广策略与方式
  • 如何将软件上传到公开网站广告投放平台排名
  • 中国建设银行官网首页 网站爱网站
  • 美观网站建设物美价廉市场调研怎么做
  • 网站开发设计招聘泉州百度开户
  • 网站建设的关键seo是什么的
  • 做百度推广一定要有网站吗关键词挖掘长尾词
  • 汕头百度公司郑州搜索引擎优化公司
  • 做网站至少要花多少钱东莞网络营销推广公司
  • 集团门户网站建设费用科目培训机构哪家最好
  • 做网站的会淘宝美工么aso搜索排名优化
  • 昆明做网站建设公司优化措施最新回应
  • 温州手机网站建设优化seo公司哪家好
  • 网站建设和维护采购协议出词
  • 中国建设银行网站会员登录百度网盘电脑版官网
  • 毕业季网站如何做网页临沂今日头条新闻最新
  • 江苏省建设工程网站磁力引擎
  • 手机网页怎么做出来的天津seo博客
  • 网站建设模块方案徐州百度搜索网站排名
  • 做网站推广的销售发的朋友圈杭州网站seo外包
  • 重庆电子商务网站seoseo快速排名软件推荐
  • 电子相册在线制作网站360浏览器网页版入口
  • 北京加盟网站建设热点营销案例
  • 外围网站做代理怎么让百度搜出自己
  • 哪个网站可以免费做音乐相册网站域名查询官网