二叉树(一)

📑前言

本文主要是【数据结构】——二叉树使用的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见

目录

    • 📑前言
    • 1.二叉树的创建及打印
      • 打印结果:
    • 2.二叉树层次前中后序遍历
      • 打印结果:
    • 3.二叉树深度和叶子结点个数
    • 📑文章末尾

  • 以如下二叉树为例

1.二叉树的创建及打印

package 二叉树;

import java.util.Scanner;

public class Main {

	static class TreeNode{
		int data;//结点存放的数据
		TreeNode left;//左孩子的引用
		TreeNode right;//右孩子的引用
		public TreeNode() {
			
		}
		public TreeNode(int data,TreeNode left,TreeNode right) {
			this.data=data;
			this.left=left;
			this.right=right;
		}
	}
	TreeNode root;//整顿二叉树的根
	public Main() {
		root=null;//开始的时候根结点为空
	}
	Scanner sc = new Scanner(System.in);
	//创建二叉树,递归思想,根,递归左子树,递归右子树,用0表示没有后继的点
	public TreeNode createBinaryTree() {
		TreeNode t;//当前的根结点
		int x=sc.nextInt();//从键盘读入当前结点的数值,如果是0表示null结点
		if(x==0) {t=null;}
		else {
			t=new TreeNode();
			t.data=x;
			t.left=createBinaryTree();
			t.right=createBinaryTree();
		}
		
		return t;
	}
	public void printTree(TreeNode t) {
		if(t!=null) {
			System.out.print(t.data);
			if (t.left!=null||t.right!=null) {
				System.out.print("(");
				printTree(t.left);
				if(t.right!=null) System.out.print(",");
				printTree(t.right);
				System.out.print(")");
			}
		}
	}
	/*
1 2 4 0 0 5 0 0 3 6 0 0 7 0 0
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main a = new Main();
		a.root=a.createBinaryTree();
		a.printTree(a.root);
	}

}

打印结果:

//输入:1 2 4 0 0 5 0 0 3 6 0 0 7 0 0
1(2(4,5),3(6,7)) 

2.二叉树层次前中后序遍历

package 二叉树;

import java.util.LinkedList;
import java.util.Queue;

import 二叉树.Main.TreeNode;

public class Order {
	/*
1 2 4 0 0 5 0 0 3 6 0 0 7 0 0
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main a = new Main();
		TreeNode root =	a.createBinaryTree();
		preOrder(root);
		System.out.println();
		midOrder(root);
		System.out.println();
		postOrder(root);
		System.out.println();
		levelOrder(root);
	}
	
	public static void preOrder(TreeNode root) {
		if (root!=null) {
			System.out.print(root.data+" ");
			preOrder(root.left);
			preOrder(root.right);
		}
	}
	public static void midOrder(TreeNode root) {
		if (root!=null) {
			midOrder(root.left);
			System.out.print(root.data+" ");
			midOrder(root.right);
		}
	}
	public static void postOrder(TreeNode root) {
		if (root!=null) {
			postOrder(root.left);
			postOrder(root.right);
			System.out.print(root.data+" ");
		}
	}
	
	public static void levelOrder(TreeNode t) {
		Queue<TreeNode> q = new LinkedList<>();
		if(t==null) return;
		q.offer(t);//根入列
		while(!q.isEmpty()) {
			TreeNode head = q.poll();//弹出列头
			System.out.print(head.data+" ");
			if(head.left!=null)
			q.offer(head.left);
			if(head.right!=null)
			q.offer(head.right);
		}
	}
}

打印结果:

//输入:1 2 4 0 0 5 0 0 3 6 0 0 7 0 0
1 2 4 5 3 6 7 
4 2 5 1 6 3 7 
4 5 2 6 7 3 1 
1 2 3 4 5 6 7 

3.二叉树深度和叶子结点个数

package 二叉树;

import 二叉树.Main.TreeNode;

public class 二叉树深度及叶子节点个数 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main a = new Main();
		TreeNode root =	a.createBinaryTree();
		System.out.println(treeDepth(root));
		System.out.println(treeLeaf(root));
	}
	
	public static int treeDepth(TreeNode root) {
		if (root==null) {
			return 0;
		}
		return Math.max(treeDepth(root.left), treeDepth(root.right))+1;
	}
	
	public static int treeLeaf(TreeNode root) {
		if (root==null) {
			return 0;
		}
		if(root.left==null&&root.right==null) return 1;
		else return treeLeaf(root.left)+treeLeaf(root.right);
	}
	
}

📑文章末尾

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第13节-简历中的开放性问题

(点击即可收听) 不少公司的开放式题目每年不会有太大的变化&#xff0c;所以在答题前可先去相关求职论坛看看这些公司往年的问题&#xff0c;分析和思考自己应当怎么回答 开放式问题回答技巧 开放式问题主要考察的是求职者的求职动机、解决问题的能力、创造力等软实力&#xff…

已解决java.lang.ClassNotFoundException——java连接mysql8/mysql5

1.准备工作 1.mysql8下载安装 这里大家没必要去mysql官网安装&#xff0c;可以直接安装phpStudy_pro,毕竟小皮面板的宣言是让天下没有难配的服务器环境&#xff0c;如下是小皮面板的界面&#xff08;同样的&#xff0c;此次用到的所有资料文末公众号可免费领取&#xff09;&a…

MSPM0L1306例程学习-UART部分(3)

MSPM0L1306例程学习系列 1.背景介绍 写在前边的话&#xff1a; 这个系列比较简单&#xff0c;主要是围绕TI官网给出的SDK例程进行讲解和注释。并没有针对模块的具体使用方法进行描述。所有的例程均来自MSPM0 SDK的安装包&#xff0c;具体可到官网下载并安装: https://www.ti…

快速傅立叶变换FFT学习笔记

什么是FFT&#xff1f; FFT&#xff08;Fast Fourier Transformation&#xff09; 是离散傅氏变换&#xff08;DFT&#xff09;的快速算法&#xff0c;即快速傅氏变换。FFT使计算机计算离散傅里叶变换所需要的乘法次数大为减少&#xff0c;特别是被变换的抽样点数N越多&#x…

使用STM32的UART实现蓝牙通信

✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 &#x1f34e;获取更多嵌入式资料可点击链接进群领取&#xff0c;谢谢支持&#xff01;&#x1f447…

算法优化:LeetCode第122场双周赛解题策略与技巧

接下来会以刷常规题为主 &#xff0c;周赛的难题想要独立做出来还是有一定难度的&#xff0c;需要消耗大量时间 比赛地址 3011. 判断一个数组是否可以变为有序 public class Solution {public int minimumCost(int[] nums) {if (nums.length < 3) {// 数组长度小于3时&a…

Python实现单因素方差分析

Python实现单因素方差分析 1.背景 正念越来越受到人们关注&#xff0c;正念是一种有意的、不加评判的对当下的注意觉察。可以通过可以通过观呼吸、身体扫描、正念饮食等多种方式培养。 为了验证正念对记忆力的影响&#xff0c;选取三组被试分别进行正念训练&#xff0c;运动训…

基于springboot+vue仓库管理系统

摘要 本文介绍了一种基于Spring Boot和Vue的现代化仓库管理系统的设计与实现。仓库管理是企业运营中至关重要的一环&#xff0c;它涉及到货物的进出、库存的管理以及订单的处理等方面。为了提高仓库管理的效率和精确度&#xff0c;我们设计了这个集成了前后端技术的系统。在系统…

37-WEB漏洞-反序列化之PHPJAVA全解(上)

WEB漏洞-反序列化之PHP&JAVA全解&#xff08;上&#xff09; 一、PHP 反序列化原理二、案例演示2.1、无类测试2.1.1、本地2.1.2、CTF 反序列化小真题2.1.3、CTF 反序列化类似题 2.2、有类魔术方法触发2.2.1、本地2.2.2、网鼎杯 2020 青龙大真题 三、参考资料 一、PHP 反序列…

16.云原生之kubesphere组件安装卸载

云原生专栏大纲 文章目录 KubeSphere组件介绍KubeSphere组件安装卸载配置内容参考安装组件步骤卸载组件步骤 KubeSphere组件介绍 KubeSphere 的全部可插拔组件如下&#xff1a; 配置项功能组件描述alertingKubeSphere 告警系统可以为工作负载和节点自定义告警策略。告警策略…

多级缓存

一、多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; •请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时&#xff…

FPGA时序分析与时序约束(五)——使用Timing Analyzer进行时序分析与约束

Quartus的安装路径下会自带有例程&#xff0c;通过fir_filter进行学习如何使用Timing Analyzer进行时序分析与约束。 1.1 创建时序网表 打开fir_filter并进行综合后可通过菜单栏Tool->Timing Analyzer或工具栏按钮运行Timing Analyzer。 根据前面提到的&#xff0c;时序分析…

研学活动报名系统源码开发方案

一、项目背景与目标 &#xff08;一&#xff09;项目背景&#xff1a; 随着教育水平的提高和人们对综合素质培养的需求增加&#xff0c;研学活动作为一种教育方式受到了广大家长和学生的青睐。为了更好地组织和管理研学活动&#xff0c;需要建立一个研学活动报名系统&#xf…

大模型关键技术:上下文学习、思维链、RLHF、参数微调、并行训练、旋转位置编码、模型加速、大模型注意力机制优化、永久记忆、LangChain、知识图谱、多模态

大模型关键技术 大模型综述上下文学习思维链 CoT奖励建模参数微调并行训练模型加速永久记忆&#xff1a;大模型遗忘LangChain知识图谱多模态大模型系统优化AI 绘图幻觉问题从 GPT1 - GPT4 拆解GPTs 对比主流大模型技术点旋转位置编码层归一化激活函数注意力机制优化 大模型综述…

攻防世界——answer_to_everything-writeup

__int64 __fastcall not_the_flag(int a1) {if ( a1 42 )puts("Cipher from Bill \nSubmit without any tags\n#kdudpeh");elseputs("YOUSUCK");return 0LL; } kdudpeh这个东西&#xff0c;根据题目提示sha1加密 import hashlib flagkdudpeh x hashlib…

FastDDS版本变迁图解

eProsima Fast DDS 最完整的开源DDS中间件! eProsima Fast DDS是一个高性能的发布-订阅框架,它使用基于发布者、订阅服务器和数据主题的解耦模型在分布式系统中共享数据。 eProsima Fast DDS速度惊人,在Windows和Linux中都击败了ZeroMQ和其他pub-sub中间件等替代品。 让…

详解矩阵的三角分解A=LU

目录 一. 求解Axb 二. 上三角矩阵分解 三. 下三角矩阵分解 四. 矩阵的三角分解 举例1&#xff1a;矩阵三角分解 举例2&#xff1a;三角分解的限制 举例3&#xff1a;主元和乘法因子均为1 举例4&#xff1a;U为单位阵 小结 一. 求解Axb 我们知道高斯消元法可以对应矩阵…

[java基础揉碎]键盘输入语句

介绍 在编程中&#xff0c;需要接收用户输入的数据&#xff0c;就可以使用键盘输入语句来获取。 需要一个扫描器&#xff08;对象&#xff09;,就是Scanner 用到的scanner代码例子

GitFlow工作流

基于 Git 这一版本控制系统&#xff0c;通过定义不同的分支&#xff0c;探索合适的工作流程来完成开发、测试、修改等方面的需求。 例如&#xff1a;在开发阶段&#xff0c;创建 feature 分支&#xff0c;完成需求后&#xff0c;将此分支合并到 develop 分支上&#xff1b;在发…

HarmonyOS鸿蒙应用开发 (一、环境搭建及第一个Hello World)

万事开头难。难在迈出第一步。心无旁骛&#xff0c;万事可破。没有人一开始就能想清楚&#xff0c;只有做起来&#xff0c;目标才会越来越清晰。--马克.扎克伯格 前言 2024年1月16日&#xff0c;华为目前开启已HarmonyOS NEXT开发者预览版Beta招募&#xff0c;报名周期为1月15…