小蠢鱼算法系列之二叉树排序

package com.foolfish.tree;
/**
 * @desc 二叉树算法
 * @author foolfish.chen
 *
 */
public class BinaryTree {
	private int nodeValue = 0; // 当前节点值
	private BinaryTree lChild = null;// 左孩子节点
	private BinaryTree rChild = null;// 右孩子节点
	
	public BinaryTree(int node,BinaryTree l, BinaryTree r){
		this.nodeValue = node;
		this.lChild = l;
		this.rChild = r;
	}

	/**
	 * @return the nodeValue
	 */
	public int getNodeValue() {
		return nodeValue;
	}

	/**
	 * @param nodeValue the nodeValue to set
	 */
	public void setNodeValue(int nodeValue) {
		this.nodeValue = nodeValue;
	}

	/**
	 * @return the lChild
	 */
	public BinaryTree getLChild() {
		return lChild;
	}

	/**
	 * @param child the lChild to set
	 */
	public void setLChild(BinaryTree child) {
		lChild = child;
	}

	/**
	 * @return the rChild
	 */
	public BinaryTree getRChild() {
		return rChild;
	}

	/**
	 * @param child the rChild to set
	 */
	public void setRChild(BinaryTree child) {
		rChild = child;
	}
	/**
	 * @desc 构造二叉树
	 * @param node
	 * @param nodeValue
	 */
	public void createTree(BinaryTree node,int nodeValue){
		/*********************************
		 * 判断当前值是否小于当前节点,若小于当前
		 * 节点,继续往左子树遍历,直到遍历到叶子
		 * 节点,又子树同理
		 *********************************/
		if(node.getNodeValue()>nodeValue){
			if(node.getLChild() != null){
				node.createTree(node.lChild, nodeValue);
			}else{
				node.setLChild(new BinaryTree(nodeValue,null,null));
			}
		}else{
			if(node.getRChild() != null){
				node.createTree(node.rChild, nodeValue);
			}else{
				node.setRChild(new BinaryTree(nodeValue,null,null));
			}
		}
	}
	/**
	 * @desc 打印从指定节点开始的树结构
	 * @param node
	 */
	public void printAll(BinaryTree node){
		// 从左边开始遍历
		if(node.getLChild() != null){
			printAll(node.getLChild());
		}
		System.out.print(node.getNodeValue()+",");
		// 从左边开始遍历
		if(node.getRChild() != null){
			printAll(node.getRChild());
		}
	}
	/**
	 * @desc 查找指定直
	 * @param node 节点信息
	 * @param Value 需要查找的值
	 */
	public int search(BinaryTree node,int Value){
		int returnValue = 0;
		/******************************
		 * 若当前节点大于要查找的值,查找左树
		 * 若当前节点小于要查找的值,查找右树
		 * 若当前节点等于要查找的值,放回当前值
		 ******************************/
		if(node.getNodeValue()>Value){
			returnValue = search(node.getLChild(), Value);
		}else if(node.getNodeValue()<Value){
			returnValue = search(node.getRChild(), Value);
		}else{
			return  node.getNodeValue();
		}
		return returnValue;
	}
	/**
	 * @desc main App
	 * @param args
	 */
	public static void main(String[] args){
		int[] array = {14,3,67,23,1,7,8,25,78,11,46,9};
		BinaryTree btree = new BinaryTree(array[0],null,null);
		for(int i = 1 ; i<array.length ; i++){
			btree.createTree(btree, array[i]);
		}
		/*********************************
		 * 打印排序后的值
		 *********************************/
		btree.printAll(btree);
		/*********************************
		 * 查找指定值
		 *********************************/
		System.out.println();
		System.out.println(btree.search(btree, 3));
	}
}
 
堆排序算法思路以及Java实现 这几天忙着找工作,看到有去阿里面试的同学遇到了堆排序的问题,因此就去网上看博客学习,但看半天实在看不懂,只好把算法导论拿出来啃,没想到还挺简单,所以在这里分享给大家。 0.堆简介 堆(二叉堆)可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示(普通的一般的二叉树通常用链表作为基本容器表示),每一个结点对应数组中的一个元素。 ... 阅读详情

相关推荐

【愚公系列】十一大排序算法(十一)-二叉树排序

排序算法是一种将一组数据按照特定的规则进行排列的方法。排序算法通常用于对数据的处理,使得数据能够更容易地被查找、比较和分析。下面是常见的11种排序算法:冒泡排序(Bubble Sort):比较相邻的元素,如果前面的元素大于后面的元素,就交换这两个元素的位置。时间复杂度为O(n^2)。选择排序(Selection Sort):在未排序的数据中找到最小(大)的元素,放置在已排序的数据末尾。时间复杂度为O(n^2)。

愚公智库 47万+

排序算法、链表、二叉树

master一系列子问题规模等规模的递归,都可以用master公式求时间复杂度对于形如:的递归式,Master定理告诉我们时间复杂度取决于:a:子问题个数b:子问题规模缩小倍数f(n):合并/分解的额外时间归并排序的递归关系假设数组长度为 n,归并排序把数组分成两半,对左右两部分分别递归排序,再合并两个有序子数组。

m0_63330263的博客 984

VSCode + Clangd 配置避坑实录:从‘红波浪线’到完美代码提示的完整心路

本文详细记录了VSCode与Clangd配置过程中的常见问题及解决方案,从编译数据库生成到参数调优,帮助C++开发者快速解决代码提示失效、头文件找不到等问题,实现完美代码补全体验。重点介绍了Clangd与LLDB的集成配置及性能优化技巧,适用于Linux和跨平台开发环境。

weixin_28829479的博客 490

【算法系列 | 6】深入解析排序算法之——堆排序

堆排序(Heap Sort)是一种基于堆数据结构的排序算法,其核心思想是将待排序的序列构建成一个最大堆(或最小堆),然后将堆顶元素与最后一个元素交换,再将剩余元素重新调整为最大堆(或最小堆),重复以上步骤直到所有元素都有序。

颜淡慕潇 1万+

Vivado与Vscode无缝集成:高效Verilog开发环境搭建指南

本文详细介绍了如何将Vivado与Vscode无缝集成,打造高效的Verilog开发环境。通过替换Vivado默认编辑器为Vscode,配置必备插件和语法检查工具,开发者可以大幅提升FPGA项目的编码效率。文章还提供了代码片段、Testbench自动生成等高级技巧,帮助开发者快速上手这一集成方案。

weixin_33737774的博客 493

给排水工程师的SWMM初体验:从软件界面到第一个简单模型的保姆级上手教程

本文为给排水工程师提供SWMM软件的保姆级上手教程,从界面解析到创建第一个简单模型,详细介绍了SWMM的核心功能和操作步骤。通过30分钟的实践指导,帮助新手快速掌握雨水管网建模的基本技能,提升工作效率。

weixin_28736355的博客 323

堆排序与链式二叉树:数据结构与排序算法的双重探索

文章目录目录引言一.堆排序1.1 版本一核心概念堆排序过程1.2 版本二堆排序函数 HeapSort向下调整算法 AdjustDown向上调整算法 AdjustUp二.链式二叉树2.1 前中后序遍历链式二叉树的结构创建链式二叉树前序遍历中序遍历后序遍历2.2 链式二叉树的常见操作 二叉树的结点个数二叉树叶子结点的个数二叉树第k层结点的个数求二叉树的高度/深度二叉树查找值为x的结点2.3 层序遍历使用层序遍历检验是否为完全二叉树兄弟们共勉 !!! 每篇前言在数据结构与算法的广阔天地中,堆排序与链式二叉树无疑是

2401_85548793的博客 1335

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

【Python算法系列十一】二叉树的3种遍历方式

二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。 遍历二叉树的方法主要分 3 种:先序遍历、中序遍历和后序遍历: 先序遍历指最先遍历节点本身,再遍历节点的左子树,最后遍历右子树的遍历方法; 中序遍历指最先遍历节点的左子树,再遍历节点本身,最后遍历右子树的遍历方法; 后序遍历指最先遍历节点的左子树,再遍历右子树,最后遍历节点本身的一种遍历方法。 在图 1 中,L 是左子树,R 是右子树,D 当前节点。如果用这三个字母来表示 3 种遍历.

m0_70372647的博客 1647

RK3568(buildroot)利用squashfs+overlay实现嵌入式系统高可靠存储方案

本文详细介绍了在RK3568嵌入式平台上,基于Buildroot系统,利用squashfs只读根文件系统与overlayfs可写层相结合的高可靠存储方案。该方案能有效防止设备意外断电导致的系统文件损坏,通过内核配置、启动脚本编写及镜像制作,实现系统核心的只读保护与用户数据的持久化分离,显著提升嵌入式设备的现场稳定性。

weixin_29189381的博客 548

用于多种无人机协作的群体智能算法:综合综述

随着无人机技术的快速高水平发展,将多架无人机作为自主控制的编队应用于复杂情况是一个新兴领域的代表之一。在实现自主控制的挑战中,碰撞避免、任务分配、路径规划和编队重构是关键功能。本文对各种经典的无人机群智能算法进行了系统的总结和分析。

erjia_的博客 1万+

【算法系列】经典的堆排序算法

堆排序(Heap Sort)是一种基于二叉堆数据结构的比较排序算法。它利用了完全二叉树的特性,将待排序的数据构造成一个最大堆或最小堆,然后通过不断移除堆顶元素并重新调整堆来实现排序。堆排序具有稳定的时间复杂度O(n log n),并且不需要额外的空间,因此在处理大规模数据时表现良好。堆排序作为一种经典的排序算法,不仅在理论上有重要的意义,在实际应用中也经常被使用。理解堆排序的工作原理及其背后的二叉堆数据结构,有助于更好地掌握其他高级算法和数据结构。

斌斌(Java) 1101

基于CNN的三相故障识别算法及实现(Matlab)

通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。

学习使你进步。 384

二叉树的递归算法例题

二叉树递归算法: 1. 统计二叉树中,度为0的结点个数 2. 统计二叉树中,度为1的结点个数 3. 统计二叉树中,度为2的结点个数 4. 统计二叉树高度 5. 统计二叉树宽度度 6. 删除二叉树中所有叶子节点 7. 交换每个节点的左右子女 8. 判断一棵树是否为二叉排序树 9. 找出给定结点在二叉树中的层次 10. 判断二叉树是否为平衡二叉树 首先,创建二叉树 BiTre...

张蔡辉 2199

Android 13 SPRD 源码默认打开多用户实际无效果问题修复

【代码】Android 13 SPRD 源码默认打开多用户实际无效果问题修复。

m0_60898338的博客 449

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

排序算法系列之堆排序

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 1 堆排序定义      n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质):      (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤

Atlas2013的专栏 1989

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

查找算法系列之复杂算法:二叉排序树BST

前面总结了顺序查找,二分查找,分块查找算法,此篇博文将详解介绍二叉排序算法(Binary Sort Tree)。 在介绍二叉排序算法之前,首先介绍什么事二叉排序树(BST)。 首先从二叉树讲起: 1、二叉树的概念 二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(leftsubtree)和“右子树”(rightsubtree)。二叉树常被用作二叉查找树和二叉

susandebug 4675

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【数据结构】排序算法系列——快速排序(附源码+图解)

接下来我们将要介绍的是排序中最为重要的算法之一——快速排序。快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),最早由东尼·霍尔提出。快速排序通常明显比其他算法更快,因为它的内部循环可以在大部分的架构上很有效率地达成。我们直接来分析它的算法思想。我们首先直接来看算法步骤,再分析其原理和目的具体的动画分析可以看这:快速排序算法动画演示_哔哩哔哩_bilibili我们首先来对基准值的选择进行分析:通常我们都会选择最左边或者最右边的基准值,这是最不需要多想的选

Skrrapper的博客 6492

Python实现: 常用排序算法 & 二叉树的遍历算法

Python实现: 常用排序算法 & 二叉树的遍历算法

taotiezhengfeng的博客 4025

算法系列十:十大经典排序算法之——堆排序

十大经典排序算法之——堆排序

初心不改 530

PHP 实现二叉树排序

数据结构 实现原理:二叉树 操作原理:通过递归的方式,对数据进行重排输出; <?php namespace Tool; /** * PHP 实现二叉树排序 * @Author:Victor */ class Node { public $leftNode; public $rightNode; public $value; public static $array = []; //排序 publ

程序之家的专栏 352

java二叉树排序算法_Java常见排序算法——堆排序

概念二叉树要了解堆首先得了解一下二叉树,在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在度大于 2 的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第 i 层至多有 2i - 1 个结点;深度为 k 的二叉树至...

weixin_35659543的博客 259

【数据结构和算法】树表的查找算法(二叉排序树与平衡二叉树)

前诉:本文章的大致内容如下 二叉排序树 1、二叉排序树查的定义 二叉排序树有称为二叉搜索树,二叉查找树 二叉排序树的定义: 二叉排序树的例子 二叉排序树性质:中序遍历非空的二叉排序树所得到的数据元素序列是一个按关键字排列的递增有序序列。 二叉排序树结果出现的原因:二叉排序树的左节点的数字比根节点要小,而右节点的数字要比根节点要大。而中序遍历是先左子树,然后再跟,在右子树,所以...

Clichong 942

算法系列之排序算法-堆排序

堆排序(Heap Sort)是一种基于堆数据结构的比较排序算法。它的时间复杂度为 $O(nlogn)$,并且是一种原地排序算法(即不需要额外的存储空间)。堆排序的核心思想是利用堆的性质来维护一个最大堆或最小堆,然后逐步将堆顶元素(最大值或最小值)取出,放到数组的末尾,最终得到一个有序的数组。

修己xj的博客 1210

二叉排序树和平衡二叉树

二叉排序树 定义 二叉排序树或者是空树,或者是满足以下性质的二叉树: 1)左子树不为空,则左子树上所有关键字的值均小于根关键字的值。 2)右子树不为空,则右子树上所有关键字的值均大于根关键字的值。 3)左右子树各是一棵二叉排序树。 存储结构 二叉排序树采用二叉链表进行存储,结点类型类似于一般的二叉树。 typedef struct BTNode { int key; // 关键字 ...

张小艾博客 4663

排序算法系列之(六)——逐步砍掉树杈的堆排序

文章目录前言堆排序排序过程代码实现代码分析运行测试 前言 在实现堆排序之前,我们先来看看常见的数据结构,在网上我看到了一个特别全的版本:数组,栈,链表,队列,树,堆,图,散列表,本着鸡蛋里挑骨头的态度,我们来看看数组和链表,这两个到底算不算数据结构,貌似它们应该算是线性表这个结构,它们更应该被称作是一个实现结构的元素,比如通过数组和链表可以实现线性表、队列、栈,二叉树等等,可是看看数据结构的定义是...

AlbertS Home of Technology 1382
上一篇: Swing其实也不是很丑啊
下一篇: 对CMMI培训的一些小看法
refactaar
博客等级 码龄17年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值