面试经典150题【61-70】

文章目录

  • 面试经典150题【61-70】
    • 61.旋转链表
    • 86.分隔链表
    • 104. 二叉树的最大深度
    • 100.相同的树
    • 226.翻转二叉树
    • 101.对称二叉树
    • 105.从前序与中序遍历序列构造二叉树
    • 106.从后序和中序遍历序列构造二叉树
    • 117.填充每个节点的下一个右侧节点指针II
    • 114.二叉树展开为链表

面试经典150题【61-70】

61.旋转链表

在这里插入图片描述

本质是调换这俩
在这里插入图片描述
第一步:成环。第二步:找head, 第三步:断环
在这里插入图片描述

class Solution {public ListNode rotateRight(ListNode head, int k) {if(head == null|| k == 0)  return head;int n = 0;			   //链表的长度ListNode tail = null;  //尾节点for(ListNode p = head; p != null ; p = p.next){tail = p;n++;}k %= n;ListNode p = head;for(int i = 0; i < n - k - 1; i++)  p = p.next;   //找到链表的第n-k个节点tail.next = head;head = p.next;p.next = null;return head;  //返回新的头节点}
}

86.分隔链表

在这里插入图片描述
新建两个链表,一个里面的值恒小于x,一个里面的值恒大于等于x,再合并两个链表即可。

class Solution {public ListNode partition(ListNode head, int x) {// 新建两个链表ListNode smlDummy = new ListNode(0), bigDummy = new ListNode(0);// 遍历链表ListNode sml = smlDummy, big = bigDummy;while (head != null) {// 将 < x 的节点加入 sml 节点后if (head.val < x) {sml.next = head;sml = sml.next;// 将 >= x 的节点加入 big 节点后} else {big.next = head;big = big.next;}head = head.next;}// 拼接两链表sml.next = bigDummy.next;big.next = null;return smlDummy.next;}
}

104. 二叉树的最大深度

在这里插入图片描述
树的问题最经典的就是DFS和BFS。
DFS:
在这里插入图片描述

class Solution {public int maxDepth(TreeNode root) {if(root == null) return 0;return Math.max(maxDepth(root.left),maxDepth(root.right)) +1;}
}

BFS就是创建一个队列,一行一行遍历。看看能遍历几行罢了。

100.相同的树

树这里就是递归去做就行。

class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p==null &&q==null) return true;//只有一个为Null ,那肯定不一样if(p==null) return false;if(q==null) return false;//比较值和左右子树return p.val==q.val && isSameTree(p.left,q.left) && isSameTree(p.right,q.right);}
}

226.翻转二叉树

在这里插入图片描述
树这边还是用递归,先处理自己的逻辑,然后直接扔给左右子节点。

class Solution {public TreeNode invertTree(TreeNode root) {if(root == null) return null;TreeNode temp=root.left;root.left=root.right;root.right=temp;invertTree(root.left);invertTree(root.right);return root;}
}

101.对称二叉树

在这里插入图片描述
永远是最左边的和最右边的想比较,然后往里面靠近。

class Solution {public boolean isSymmetric(TreeNode root) {if(root==null) return true;return compare(root.left, root.right);}public boolean compare(TreeNode left,TreeNode right){if(left==null && right==null) return true;if(left ==null && right!=null) return false;if(left!=null && right==null) return false;if(left.val==right.val){boolean b1=compare(left.left,right.right);boolean b2=compare(right.left,left.right);return b1&&b2;}return false;}
}

105.从前序与中序遍历序列构造二叉树

在这里插入图片描述
根据preorder[0]去切开Inorder数组,并且得知数量后,再行切开preorder数组,最后迭代即可。

class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {if(preorder.length == 0) return null;TreeNode root=new TreeNode(preorder[0]);int i=0;for(int j=0;j<inorder.length;j++){if(inorder[j]==preorder[0]) i=j;}int[] inorder1=Arrays.copyOfRange(inorder,0,i);int[] inorder2=Arrays.copyOfRange(inorder,i+1,inorder.length);int[] preorder1=Arrays.copyOfRange(preorder,1,1+i);int[] preorder2=Arrays.copyOfRange(preorder,1+i,preorder.length);root.left=buildTree(preorder1,inorder1);root.right=buildTree(preorder2,inorder2);return root;}
}

106.从后序和中序遍历序列构造二叉树

在这里插入图片描述

class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) {if(postorder.length == 0) return null;TreeNode root=new TreeNode(postorder[postorder.length-1]);int i=0;for(int j=0;j<inorder.length;j++){if(inorder[j]==postorder[postorder.length-1]) i=j;}int[] inorder1=Arrays.copyOfRange(inorder,0,i);int[] inorder2=Arrays.copyOfRange(inorder,i+1,inorder.length);int[] postorder1=Arrays.copyOfRange(postorder,0,i);int[] postorder2=Arrays.copyOfRange(postorder,i,postorder.length-1);root.left=buildTree(inorder1,postorder1);root.right=buildTree(inorder2,postorder2);return root;}
}

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

在这里插入图片描述
用个BFS就行了

class Solution {public Node connect(Node root){if(root==null) return null;LinkedList<Node> queue=new LinkedList<>();queue.addLast(root);while(!queue.isEmpty()){Node temp=null;Node pre=null;int queueSize= queue.size();for(int i=0;i<queueSize;i++){temp=queue.pollFirst();if(pre !=null) pre.next=temp;pre =temp;if(temp.left!=null) queue.addLast(temp.left);if(temp.right!=null) queue.addLast(temp.right);}temp.next=null;}return root;}
}

114.二叉树展开为链表

在这里插入图片描述
直接先序遍历放到数组里,然后挨个取出来建立新树即可。

class Solution {public void flatten(TreeNode root) {List<TreeNode> list = new ArrayList<TreeNode>();preorderTraversal(root, list);int size = list.size();for (int i = 1; i < size; i++) {TreeNode prev = list.get(i - 1), curr = list.get(i);prev.left = null;prev.right = curr;}}public void preorderTraversal(TreeNode root, List<TreeNode> list) {if (root != null) {list.add(root);preorderTraversal(root.left, list);preorderTraversal(root.right, list);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

留学|谈PS|耶鲁大学管理学院招生办执行主任谈个人PS

仅仅为了共同学习与分享 内容提要:在一篇个人自述中&#xff0c;我们要求申请人将他们的过去和未来有机地结合起来。我们把这种自传叫作“职业目标”自传。它为我们提供了确凿的信息&#xff0c;同时也可以确定申请人是否具有对自己及其职业的综合性反思能力。通常的情况是&am…

PostgreSQL 流复制

文章目录 1.流复制介绍2.异步流复制2.1.主库部署2.2.备库部署2.3.测试 3.同步复制3.1.主库部署3.2.备库部署3.3.测试 4.主备切换 开源中间件 # PostgreSQLhttps://iothub.org.cn/docs/middleware/ https://iothub.org.cn/docs/middleware/postgresql/postgres-stream/1.流复制…

Linux运维_Bash脚本_编译安装Mesa-23.3.6(OpenGL)

Linux运维_Bash脚本_编译安装Mesa-23.3.6(OpenGL) Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在…

为什么main方法在Java中代表主线程?

main 方法在 Java 等编程语言中确实代表着程序的入口点&#xff0c;也就是程序开始执行的地方。当我们启动一个 Java 应用程序时&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;会首先查找 main 方法&#xff0c;并从那里开始执行程序。 关于为什么 main 方法代表主线程&a…

unity学习(53)——选择角色界面--分配服务器返回的信息

好久没写客户端了&#xff0c;一上手还不太适应 1.经过测试&#xff0c;成功登陆后&#xff0c;客户端请求list_request&#xff0c;成功返回&#xff0c;如下图&#xff1a; 可见此时model第三个位置的参数是1.也成功返回了所有已注册角色的信息。 2.之前已知创建的角色信息…

141 Linux 系统编程18 ,线程,线程实现原理,ps –Lf 进程 查看

一 线程概念 什么是线程 LWP&#xff1a;light weight process 轻量级的进程&#xff0c;本质仍是进程(在Linux环境下) 进程&#xff1a;独立地址空间&#xff0c;拥有PCB 线程&#xff1a;有独立的PCB&#xff0c;但没有独立的地址空间(共享) 区别&#xff1a;在于是否共…

html前端的几种加密/解密方式

HTML前端的加密解密方式有以下几种&#xff1a; 一、base64加密 Base64编码&#xff1a;Base64是一种将二进制数据转换为可打印字符的编码方式。在前端&#xff0c;可以使用JavaScript的btoa()函数进行Base64编码&#xff0c;使用atob()函数进行解码。 var str "hello…

uniapp发行H5获取当前页面query

阅读uni的文档大致可得通过 onLoad与 onShow()的形参都能获取页面传递的参数&#xff0c;例如在开发时鼠标移动到方法上可以看到此方法的简短介绍 实际这里说的是打开当前页面的参数&#xff0c;在小程序端的时候测试并无问题&#xff0c;但是发行到H5时首页加载会造成参数获取…

掌握mysql,看完这篇文章就够了

1.mysql 学习数据库就是学习数据库管理系统&#xff08;一个数据管理系统可以管理多个数据库&#xff09; 安装 安装版本&#xff1a;mysql -installter -community-5.7.41.0.msl 流程 1.custom自定义安装 2.选择安装MySQl Server 5.7.41 - x64 3.默…

c++ 常用新特性总结【c++11】,【c++14】,【c++17】,【c++20】

文章目录 常用的c11新特性1.自动推导类型(auto)2.lambda表达式3.智能指针4.范围for循环5.右值引用 - 移动语义6.类型别名7.constexpr8.static_assert(静态断言)9.nullptr10.列表初始化11.继承构造函数12.显示虚函数重载(override)13.final14.变长模板参数15.新的容器与算法16.强…

代码随想录算法训练营第四十八天|583. 两个字符串的删除操作,72. 编辑距离

系列文章目录 代码随想录算法训练营第一天|数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

第三方神秘顾客调查:如何选择专业的营业厅神秘顾客公司

选择专业的营业厅神秘顾客公司时&#xff0c;确实需要考虑多个因素&#xff0c;以确保您合作的公司能够为您提供高质量的服务和有价值的反馈。以下是选择营业厅神秘顾客公司时应考虑的关键因素&#xff1a; 1、公司声誉与经验&#xff1a;选择在行业内有良好声誉和丰富经验的神…

内容管理平台原来这么好用,优秀企业必备

内容管理平台是企业的强有力支持者&#xff0c;它可以使企业对旗下的各种网站、应用和其他数字内容进行集中管理&#xff0c;有效提高工作效率。对于企业的运营、市场推广和客户服务等各方面都有着重要的影响。今天&#xff0c;我们就来推荐三款值得尝试的内容管理平台。 首先…

论文的引用书写方法

前置操作 1、全选文献 2、在开始选项卡 段落功能区 选择编号功能 3、设置编号格式 [1] 论文的引用 1、光标放在需要引用论文的地方 2、选择引用选项卡 点击交叉引用 3、引用类型为编号项 引用内容为段落编号 选择需要的第几条参考文献

备战蓝桥杯---动态规划的一些思想2

话不多说&#xff0c;直接看题&#xff1a; 1.换根DP&#xff1a; 我们肯定不能对每一个根节点暴力求&#xff0c;我们不妨先求f[1]&#xff0c;我们发现当他的儿子作为根节点时深度和为f[1](n-cnt[i])-cnt[i](cnt[i]表示以i为根的节点数&#xff09;&#xff0c;这样子两遍DFS…

论文阅读:Diffusion Model-Based Image Editing: A Survey

Diffusion Model-Based Image Editing: A Survey 论文链接 GitHub仓库 摘要 这篇文章是一篇基于扩散模型&#xff08;Diffusion Model&#xff09;的图片编辑&#xff08;image editing&#xff09;方法综述。作者从多个方面对当前的方法进行分类和分析&#xff0c;包括学习…

Python exec 函数解析:探索动态代码执行的无限可能!

在 Python 中&#xff0c;exec() 是一个内置函数&#xff0c;用于执行储存在字符串或文件中的 Python 代码。这个函数的灵活性使得它在某些情况下成为一种有用的工具&#xff0c;但也因为其潜在的安全风险而需要谨慎使用。本文将深入探讨 exec() 函数的使用方法、注意事项以及适…

P10095 [ROIR 2023 Day 1] 斐波那契乘积

难度&#xff1a;普及/提高- 题目背景 翻译自 ROIR 2023 D1T2。 斐波那契数指斐波那契数列&#xff08;f0​1,f1​1,fi​fi−2​fi−1​&#xff09;中出现的数。 题目描述 给定一个自然数 n&#xff0c;求出将其表示为大于 1 的斐波那契数的乘积的方式数量。 输入格式 …

微信小程序-可以用区域

简介 movable-view和movable-area是可移动的视图容器&#xff0c;在页面中可以拖拽滑动。 本篇文章将会通过该容器实现一个常用的拖拽按钮功能。 使用效果 代码实现 side-view.wtml 布局见下面代码&#xff0c;left view为内容区域&#xff0c;right view为操作按钮&a…

【初中up主分享】自己动手,丰衣足食!看我打造的下载利器!

代码如下&#xff1a; import os.path import tkinter as tk import tkinter.ttk as ttk import tkinter.filedialog as tf import pytube from urllib.error import URLError import tkinter.messagebox as tm import requests import io from PIL import ImageTk, Image imp…