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

网站改完域名打开速度慢/优化推广

网站改完域名打开速度慢,优化推广,net后缀的可以做网站吗,怎么在b2b网站上发信息让百度收录怎么做文章目录 二叉树的操作一、 二叉树的存储1.二叉树的存储结构 二、 二叉树的基本操作1.前置创建一棵二叉树:1. 定义结点 2.简单的创建二叉树 2.二叉数的遍历1.前序遍历2.中序遍历3.后序遍历4.层序遍历 3.二叉树的操作1.获取树中节点的个数2.获取叶子节点的个数3.获取…

文章目录

  • 二叉树的操作
    • 一、 二叉树的存储
      • 1.二叉树的存储结构
    • 二、 二叉树的基本操作
      • 1.前置
        • 创建一棵二叉树:
          • 1. 定义结点
        • 2.简单的创建二叉树
      • 2.二叉数的遍历
          • 1.前序遍历
          • 2.中序遍历
          • 3.后序遍历
          • 4.层序遍历
      • 3.二叉树的操作
        • 1.获取树中节点的个数
        • 2.获取叶子节点的个数
        • 3.获取第K层节点的个数
        • 4.获取二叉树的高度


二叉树的操作

一、 二叉树的存储

1.二叉树的存储结构

  • 顺序存储
  • 类似于链表的链式存储
// 孩子表示法
class Node {
int val; // 数据域Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树
}
// 孩子双亲表示法
class Node {int val; Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树Node parent; // 当前节点的根节点
}

二、 二叉树的基本操作

1.前置

在这里插入图片描述

创建一棵二叉树:
1. 定义结点
public class TestBinaryTree {static class  TreeNode{//public char val;//数据域public TreeNode left;//左孩子的引用public TreeNode right;//右孩子的引用public TreeNode(char val){//构造方法this.val = val;}}public TreeNode root;//二叉树的根节点
}

1.设置数据域,左右孩子的引用

2.设置构造方法

3.设置该树的根节点

2.简单的创建二叉树
    public TreeNode creatTree(){//创建一个二叉树TreeNode A = new TreeNode('A');TreeNode B = new TreeNode('B');TreeNode C = new TreeNode('C');TreeNode D = new TreeNode('D');TreeNode E = new TreeNode('E');TreeNode F = new TreeNode('F');TreeNode G = new TreeNode('G');TreeNode H = new TreeNode('H');A.left = B;A.right = C;B.left = D;B.right = E;E.left = H;C.left = F;C.right = G;return A;}

只是简单的手动创建二叉树,正确的写法在下文用递归完成

2.二叉数的遍历

在这里插入图片描述

1.前序遍历

根节点 -> 左子树 -> 右子树

1.遇到根节点,先打印根节点

2.根节点打印完,先打印左子树,左边打印完了,再打印右子树

3.每棵树都有根、左、右,子树中同样根据该顺序打印

ABDCEF

遍历思路:

    //前序遍历       先根,再左,后右//递归实现:public  void preOrder(TreeNode root){if (root==null){return ;}System.out.println(root.val);preOrder(root.left);preOrder(root.right);}
  • 截止条件为结点等于空
  • 如果不为空,打印根结点的值
  • 递归子树,遇到空返回
  • 把左子树递归完后,再进入右子树

子问题思路:

class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();if (root==null){return res;}res.add(root.val);List<Integer> leftTree = preorderTraversal(root.left);res.addAll(leftTree);List<Integer> rightTree = preorderTraversal(root.right);res.addAll(rightTree);return res;}
}
2.中序遍历

左子树 -> 根节点 -> 右子树

先打印左子树,左子树打印完了,再打印根节点,最后打印右子树

    //中序遍历public  void inOrder(TreeNode root){if (root==null){return ;}inOrder(root.left);System.out.print(root.val+" ");inOrder(root.right);}

DBAECF

3.后序遍历

左子树 -> 右子树 -> 根节点

先打印左子树,再打印右子树,最后打印根节点

DBEFCA

//后序遍历public  void postOrder(TreeNode root){if (root==null){return ;}postOrder(root.left);postOrder(root.right);System.out.print(root.val+" ");}
4.层序遍历

按从左到右,从上到下的顺序

ABCDEF

  • 前序遍历可以定位根的位置

  • 中序遍历找到根,根的左边就是左子树,根的右边是右子树

  • 只根据前序遍历和后续遍历不能创建一个二叉树,无法确定左右子树

3.二叉树的操作

1.获取树中节点的个数

时间复杂度 : o (N) 要遍历每一个结点

空间复杂度 :o (log2N) 开辟的内存 ~= 高度,开辟右树的时候,左树已经递归完了

(log2N)->完全二叉树 单分支数:o(N)

子问题思路:左数的结点+右树的结点+1

    public int size(Node root) {if (root == null) {return 0;}int leftSize = size(root.left);int rightSize = size(root.right);return leftSize + rightSize + 1;}

结点为空返回0;

一个结点的左右子结点都为null,返回0+0+1 = 1,代表该子树的结点数

左子树结点数+右子树结点数+1 等于当前数的总结点数

遍历思路:遇见结点+1

    public int nodeSize = 0;public void size(TreeNode root) {if (root == null) {return 0;}nodeSize++;size(root.left);size(root.right); }

结点不为空就+1

2.获取叶子节点的个数
    public int getLeafNodeCount(TreeNode root) {if (root == null) {return 0;}if (root.left == null && root.right == null) {return 1;//遇到叶子结点,返回1}int leftSize = getLeafNodeCount(root.left);//递归返回左数的叶子结点个数int rightSize = getLeafNodeCount(root.right);//递归返回右数的叶子结点个数return leftSize + rightSize;}

子问题思路:

遇到叶子结点,返回1

递归找到底层的叶子结点,层层返回,左右子树分别包含的叶子结点数之和

    public static int leafSize;public void getLeafNodeCount2(TreeNode root) {if (root == null){return;}if (root.left ==null&& root.right==null){leafSize++;}getLeafNodeCount2(root.left);getLeafNodeCount2(root.right);}

递归思路,遇到符合的叶子结点,计数+1

3.获取第K层节点的个数

子问题思路:

    //获取第K层节点的个数public int getKLevelNodeCount(TreeNode root, int k) {if (root == null) {return 0;}if (k == 1) {return 1;}int liftSize = getKLevelNodeCount(root.left, k - 1);int rightSize = getKLevelNodeCount(root.right, k - 1);return liftSize + rightSize;}

1.求 root 的第 K 层结点 ==求左树的第K-1层结点 + 求右树的第K-1层结点

2.不断递归子树,当 K-1 为1时,所求的结点数的返回值之和 就为K层的结点个数

4.获取二叉树的高度
    // 获取二叉树的高度public int getHeight(TreeNode root) {if (root == null) {return 0;}int leftHeight= getHeight(root.left);int rightHeight= getHeight(root.right);return (leftHeight > rightHeight) ? leftHeight + 1 : rightHeight + 1;}

1.求出左树的高度和右树的高度,返回两者中的最大值+1

2.root==null ,返回0

3.时间复杂度 o(N), N为结点个数,每个结点在递归中只被遍历一遍

4.空间复杂度:o(height),height为二叉树高度,递归函数需要栈空间,栈空间取决于递归的深度,空间复杂的==二叉树的高度

点击移步博客主页,欢迎光临~

偷cyk的图

相关文章:

二叉树的遍历+二叉树的基本操作

文章目录 二叉树的操作一、 二叉树的存储1.二叉树的存储结构 二、 二叉树的基本操作1.前置创建一棵二叉树&#xff1a;1. 定义结点 2.简单的创建二叉树 2.二叉数的遍历1.前序遍历2.中序遍历3.后序遍历4.层序遍历 3.二叉树的操作1.获取树中节点的个数2.获取叶子节点的个数3.获取…...

Go 语言gin框架的web

节省时间与精力&#xff0c;更高效地打造稳定可靠的Web项目&#xff1a;基于Go语言和Gin框架的完善Web项目骨架。无需从零开始&#xff0c;直接利用这个骨架&#xff0c;快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势&#xff0c;轻松处理高并发、大…...

Docker底层原理:Cgroup V2的使用

文章目录 检查 cgroup2 文件系统是否已加载检查系统是否已挂载 cgroup2 文件系统创建 cgroup2 层次结构查看 cgroup2 开启的资源控制类型启用 cgroup2 资源控制设置 cgroup2 资源限制加入进程到 cgroup2 检查 cgroup2 文件系统是否已加载 cat /proc/filesystems | grep cgroup…...

历年上午真题笔记(2014年)

解析:A 网络设计的三层模型 : 接入层:Layer 2 Switching,最终用户被许可接入网络的点,用户通过接入层可以访问网络设备。 汇聚层:Layer2/3 Switching,访问层设备的汇聚点,负责汇接配线单元,利用二、三层技术实现工作组分段及网络故障的隔离,以免对核心层网络设备造…...

数据库软考知识

分布式数据库透明性 封锁 加上共享锁之后只能加共享锁&#xff0c;加上排他锁之后&#xff0c;啥锁都不能加。 分布式数据库特性 伪传递定理 SQL函数定义&#xff0c;有点冷 来了奥&#xff0c;更冷 存储过程 很重要&#xff0c;下午第二大题也是数据库...

学习笔记|配对样本均数T检验|SPSS常用的快捷键|规范表达|《小白爱上SPSS》课程:SPSS第六讲 | 配对样本均数T检验

目录 学习目的软件版本原始文档配对样本均数T检验一、实战案例二、案例解析三、统计策略四、SPSS操作1、正态性检验2、配对样本T检验 五、结果解读六、规范报告1、规范表格2、规范文字 划重点Tips:SPSS常用的快捷键 学习目的 SPSS第六讲 | 配对样本均数T检验 软件版本 IBM S…...

python内置模块smtplib、email 发送电子邮件

一、简介 smtplib 是 Python 的标准库之一&#xff0c;用于发送电子邮件。它提供了一个简单的接口来连接到 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;服务器&#xff0c;并通过该服务器发送电子邮件。 email 是 Python 的标准库之一&#xff0c;用于处理电子…...

Qt使用QWebEngineView一些记录

1.关闭软件警告&#xff1a; Release of profile requested but WebEnginePage still not deleted. Expect troubles! 原因&#xff0c;系统退出关闭view&#xff0c;没有释放page。 解决办法&#xff1a;手动释放page 顺便把view也释放了。 Widget::~Widget() {updateIni…...

【2023.10.30练习】C语言-判断等式成立

计算机能力挑战初赛2020.20题 题目描述&#xff1a; 输入正整数A、B、C(0<A,B,C<10000),若用、-、*、/、%之一组成等式(即ABC&#xff0c;是上述运算符之一&#xff0c;)&#xff0c;则输出“YES”&#xff0c;否则输出“NO”&#xff1b; 输入&#xff1a; 第一行输入…...

Wpf 使用 Prism 实战开发Day03

一.实现左侧菜单绑定 效果图: 1.首先需要在项目中创建 mvvm 的架构模式 创建 Models &#xff0c;放置实体类。 实体类需要继承自Prism 框架的 BindableBase&#xff0c;目的是让实体类支持数据的动态变更! 例如: 系统导航菜单实体类 / <summary>/// 系统导航菜单实体类…...

JavaEE-cookie和session

本部分内容包括 cookie基本概念&#xff0c;sendcookies和getcookies代码&#xff1b; session基本概念&#xff0c;session实现登陆界面&#xff1b; 上述过程中涉及的代码如下&#xff1a; 1 import javax.servlet.ServletException; import javax.servlet.annotation.WebSe…...

Java设计模式之命令模式

目录 定义 结构 案例 优点 缺点 使用场景 JDK源码解析 Thread中start与run方法的区别 定义 将一个请求封装为一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行存储、传递、调用、增…...

记录一段帮朋友写的代码,使用牛顿-拉夫逊方法解方程

要求 已知公式&#xff1a; t G A B F r B r 2 2 F A 2 B G A F ln ⁡ ( r − A ) C o n s t t\frac{GAB}{F}r\frac{Br^2}{2F}\frac{A^2BGA}{F}\ln (r-A)Const tFGAB​r2FBr2​FA2BGA​ln(r−A)Const 其中 t 的值为0-1000&#xff0c;每间隔25取一次值A2.12941E-10B0.…...

滑动窗口限流算法实现一

固定算法 原理&#xff1a;固定算法是将时间线分隔成固定大小的时间窗口&#xff0c;每个窗口都会有个计数器&#xff0c;用来记录窗口时间范围内的请求总数&#xff0c;如果窗口的请求总数达到最大限定值&#xff0c;会认定流量超限。比如将窗口大小设为1分钟&#xff0c;每分…...

简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析

问题背景&#xff1a; 前端需要发送一个这样的请求&#xff0c;但出现404 首先解析请求的变化&#xff1a; http://www.51xuecheng.cn/api/checkcode/pic 1.请求先打在nginx&#xff0c;www.51xuecheng.cn/api/checkcode/pic部分匹配到了之后会转发给网关进行处理变成localho…...

EMQX内置Web管理控制台-Dashboard

一、Dashboard概述 EMQX Dashboard官网文档&#xff1a;https://docs.emqx.com/zh/enterprise/v5.1/dashboard/introduction.html 1、简介 EMQX 为用户提供了一个功能强大的内置管理控制台&#xff0c;即 EMQX Dashboard。通过这个控制台的 Web 界面&#xff0c;用户可以轻松监…...

计算机网络重点概念整理-第四章 网络层【期末复习|考研复习】

计算机网络复习系列文章传送门&#xff1a; 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 前言四、网络层4.1 网络层功能4.1.1 电路交换、报文交换与分组交换4.1…...

数组转树形数据

const nodes [{ id: 3, name: 节点C, pid: 1 },{ id: 6, name: 节点F, pid: 3 },{ id: 0, name: root, pid: null },{ id: 1, name: 节点A, pid: 0 },{ id: 8, name: 节点H, pid: 4 },{ id: 4, name: 节点D, pid: 1 },{ id: 2, name: 节点B, pid: 0 },{ id: 5, name: 节点E, p…...

react动态插入样式

在开发组件过程中&#xff0c;偶尔需要动态的插入css&#xff0c;比如在在iframe中渲染组件后&#xff0c;iframe中是没有样式的&#xff0c;所以需要手动插入样式。 插入样式 通常是在useLayoutEffect中动态创建style标签 useLayoutEffect(() > {if (!ref.current) {cons…...

OkHttp网络框架深入理解-SSL握手与加密

OkHttp简介 由Square公司贡献的一个处理网络请求的开源项目&#xff0c;是目前Android使用最广泛的网络框架。从Android4.4开始HttpURLConnection的底层实现采用的是OkHttp。 特点&#xff1a; 支持HTTP/2并允许对同一主机的所有请求共享一个套接字通过连接池,减少了请求延迟…...

Mac 安装使用NPM及常用命令

环境&#xff1a; Mac 工具&#xff1a; NPM 可通过官网查询一些模块相关 NPM Doc 通过官网文档了解更多的关于NPM的使用 安装 NPM是Node.js的包管理工具&#xff0c;可用于解决 Node.js在代码部署上的问题。 新版本的Node.js已经集成了NPM&#xff0c; 因此可通过下载 Nod…...

利用 JSqlParser 防止 SQL 注入

高手文章《jsqlparser:实现基于SQL语法分析的SQL注入攻击检查》介绍了利用 JSqlParser 防止 SQL 注入&#xff0c;写得很好&#xff0c;只不过有两个问题&#xff0c;代码比较复杂&#xff0c;我于是作了简化&#xff0c;只有两个类&#xff1b;其次检测比较严格&#xff0c;连…...

10.27~10.29数电第三次实验分析与问题

实验要求 分析 寄存器 D触发器有两个输出口&#xff0c;一个输入口&#xff0c;一个时钟信号&#xff0c;一个复位信号 同步异步就是说复位信号在不在always里 给它加一个load就成了一位寄存器&#xff0c; 寄存器堆 8个8位的寄存器堆&#xff0c;每个寄存器都有两读一写…...

【软考】14.3 设计模式

《设计模式》 有下划线&#xff1a;类模式 / 对象模式无下划线&#xff1a;对象模式 创建型 设计模式 创建对象 构建器&#xff08;Builder&#xff09;&#xff1a;类和构造分离抽象工厂&#xff08;Abstract Factory&#xff09;&#xff1a;抽象接口工厂&#xff08;Factor…...

Mac docker+vscode

mac 使用docker vs code 通过vscode 可以使用docker容器的环境。 可以在容器安装gdb, 直接调试代码。 创建容易时候可以指定目录和容易目录可以共享文件。...

LLVM学习笔记(58)

4.4. 目标机器对象 在main()函数的350行&#xff0c;TimeCompilations默认为1&#xff0c;可以通过隐藏的选项“-time-compilations”来指定它的值&#xff0c;它的作用是重复进行指定次数的编译&#xff0c;以得到更好的编译用时数据。而在这个循环中调用的compileModule()&a…...

C语言 每日一题 PTA 10.30 day8

1.高空坠球 皮球从某给定高度自由落下&#xff0c;触地后反弹到原高度的一半&#xff0c;再落下&#xff0c;再反弹&#xff0c;……&#xff0c;如此反复。问皮球在第n次落地时&#xff0c;在空中一共经过多少距离&#xff1f;第n次反弹的高度是多少&#xff1f; 输入格式 : …...

nacos在linux中的安装、集群的配置、mysql生产配置

1.下载和安装 官方下载地址&#xff1a;https://github.com/alibaba/nacos/releases&#xff0c;根据自己需要的本版去下载就行 下载的是 .tar.gz 后缀的文件是linux版本的 使用tar命令解压&#xff0c;完成之后是一个nacos的文件夹 和windows下的文件夹目录是一样的 要启…...

OpenAI 组建安全 AGI 新团队!应对AI“潘多拉魔盒”

夕小瑶科技说 原创 作者 | 小戏 一旦谈及未来 AI&#xff0c;除了天马行空的科幻畅想&#xff0c;不可避免的也有未来 AI 时代的末日预言。从 AI 武器化到 AI 欺骗&#xff0c;从邪恶 AI 到 AI 掌权&#xff0c;人工智能&#xff0c;尤其是通用人工智能的风险始终都清清楚楚的…...

上网行为管理软件有哪些丨功能图文超详细介绍

很多人都在后台问&#xff0c;上网行为管理软件到底是什么&#xff0c;有什么作用&#xff0c;今天就重点给大家讲解一下&#xff1a; 是什么 上网行为管理软件可以帮助企业规范员工的上网行为&#xff0c;提高办公效率&#xff0c;减少潜在威胁。 有哪些 在市面上&#xff…...