您的位置:首页 > 游戏 > 游戏 > 珠海公众号开发公司_网线制作的注意事项_友链查询站长工具_aso优化平台有哪些

珠海公众号开发公司_网线制作的注意事项_友链查询站长工具_aso优化平台有哪些

2024/11/17 17:20:03 来源:https://blog.csdn.net/weixin_73939095/article/details/143267585  浏览:    关键词:珠海公众号开发公司_网线制作的注意事项_友链查询站长工具_aso优化平台有哪些
珠海公众号开发公司_网线制作的注意事项_友链查询站长工具_aso优化平台有哪些

仅为个人记录复盘学习历程,解题思路来自代码随想录

代码随想录刷题笔记总结网址:
代码随想录

116.填充每个节点的下一个右侧节点指针

给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。二叉树定义:

图例:

提供参数:根结点root

主要思路:与二叉树的层序遍历大体相同,在每层的操作时,需要使用一个指针将第一个节点的操作提出来,然后在后续的循环遍历时,指针的循环一起移动。

二叉树的层序遍历在上一次学习中学习过了不再赘述。

代码 大致如下:

    public Node connect(Node root) {//Queue<Node>queue=new LinkedList<Node>();if(root==null)return root;queue.offer(root);while(!queue.isEmpty()){int len=queue.size();Node node=queue.poll();if(node.left!=null) queue.offer(node.left);if(node.right!=null) queue.offer(node.right);for(int i=1;i<len;i++){Node temp=queue.poll();if(temp.left!=null)queue.offer(temp.left);if(temp.right!=null)queue.offer(temp.right);node.next=temp;node=temp;}}return root;}

117.填充每个节点的下一个右侧节点指针II

题目与116.填充每个节点的下一个右侧节点指针类似,不过不是116中的完全二叉树,而是普通二叉树。

提供参数:根结点root

主要思路:和116的思路完全一致,二叉树完不完全在我们的思路下完全不影响。

代码和上一题一样:

    public Node connect(Node root) {//Queue<Node>queue=new LinkedList<Node>();if(root==null)return root;queue.offer(root);while(!queue.isEmpty()){int len=queue.size();Node node=queue.poll();if(node.left!=null) queue.offer(node.left);if(node.right!=null) queue.offer(node.right);for(int i=1;i<len;i++){Node temp=queue.poll();if(temp.left!=null)queue.offer(temp.left);if(temp.right!=null)queue.offer(temp.right);node.next=temp;node=temp;}}return root;}

104.二叉树的最大深度

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。例如如下子树深度为3:

主要思路:与二叉树的层序遍历大体相同,一个树的最大深度就是层数,使用整型变量dep记录层数,在每层的操作后dep++,最后返回dep即可。

代码大致如下:

    public int maxDepth(TreeNode root) {int dep=0;Queue<TreeNode>queue=new LinkedList<TreeNode>();if(root==null)return dep;queue.offer(root);while(!queue.isEmpty()){int len=queue.size();for(int i=0;i<len;i++){TreeNode temp=queue.poll();if(temp.left!=null)queue.offer(temp.left);if(temp.right!=null)queue.offer(temp.right);}dep++;}return dep;}

111.二叉树的最小深度

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。如下图最小深度为2:

主要思路:和104.二叉树的最大深度相比只需要做一些小改动,二叉树在每层当遇到左右子结点都为null时就可以确定到达最小深度了,所以在每层的循环遍历操作中需要加入对是否到达最小深度的判断,在上一题中,我们把dep++放在每层操作结束后,这里由于在每层操作中可能会在操作中间就到达最小深度,所以我们需要将dep++提前,提前到在对每层操作开始前,可以这么做的原因是:如果没有下一层的操作(上一层的操作中间遇到了最小深度),就已经返回了,能dep++显然说明该层是存在的。

代码大致如下:

    public int minDepth(TreeNode root) {int dep=0;Queue<TreeNode>queue=new LinkedList<TreeNode>();if(root==null)return dep;queue.offer(root);while(!queue.isEmpty()){int len=queue.size();dep++;for(int i=0;i<len;i++){TreeNode temp=queue.poll();if(temp.left!=null)queue.offer(temp.left);if(temp.right!=null)queue.offer(temp.right);if(temp.left==null&&temp.right==null) return dep;}}return dep;  }

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com