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));
}
}
分享到:
相关推荐
- 空间效率:相比于其他动态排序算法,如归并排序、堆排序等,二叉树排序通常需要更少的额外空间。 然而,也有其不足之处: - 平均性能:当输入数据已经部分排序或者随机分布时,二叉搜索树可能会退化成链表,此时...
基于二叉树的位排序算法是计算机科学中一种高效的排序方法,尤其在处理复杂数据结构和大数据量排序时显示出其优越性。该算法利用了二叉树的性质,通过位操作来实现数据的排序,位排序通常指的是根据数据中特定位的值...
二叉树排序算法是一种基于二叉树数据结构的排序方法,它主要利用了二叉树的特性来实现数据的有序排列。在这个主题中,我们将会深入探讨二叉树的构造、性质以及如何利用它们进行排序。JavaScript作为一种常用的编程...
本文将详细介绍几种常见的排序算法及其Java实现,同时也会涉及二叉树的基本概念和实现。 首先,让我们从最简单的排序算法开始。冒泡排序是一种基础的交换排序方法,它通过重复遍历待排序的数组,依次比较相邻元素并...
堆排序是一种高效的排序算法,基于完全二叉树的特性。在计算机科学中,二叉树是一种数据结构,每个节点最多有两个子节点。堆排序利用了堆这种数据结构所具有的特性,可以被看作是一个近似完全二叉树的结构,并且满足...
此外,对于已经部分有序的数据,二叉树排序可能会比其他排序算法更快,因为插入操作的代价相对较低。 二叉树算法在实际应用中广泛,例如数据库索引、文件系统、搜索引擎等领域。通过学习和理解这个C#实现,开发者...
4. **报告编写**:在课程设计报告中,你需要清晰地阐述二叉排序树的原理、实现过程、优缺点以及与其他排序算法的比较,例如快速排序、归并排序等。 5. **演讲PPT制作**:制作演示文稿时,要确保包含关键概念、示例...
编写递归算法,计算二叉树中叶子结点的数目
编写算法判别给定二叉树是否为完全二叉树,用递归实现
遇到算法问题,去找博客?去翻自己之前写过的几千行代码? 我整理好了xmind,分享给大家。html格式的,导入xmind就行。
### 二叉树的递归算法:建立与遍历 #### 一、二叉树的基本概念 二叉树是计算机科学中的一个重要数据结构,它是一种树形结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。在二叉树中,左子节点...
编写算法交换二叉树中所有结点的左右子树 本文档主要介绍了如何编写算法交换二叉树中所有结点的左右子树。该算法使用 C 语言实现,通过建立二叉树、先序遍历输出结点数据和后序遍历交换左右子树三个步骤来实现。 ...
在IT领域,排序算法、红黑树和二叉树以及最长递增子序列(LCS)是基础且至关重要的概念,广泛应用于数据处理和算法设计。以下是对这些知识点的详细阐述: 1. **排序算法**: - **合并排序**(Merge Sort):基于...
根据给定的文件信息,我们将深入探讨如何通过不同的方法来判断一棵二叉树是否为二叉排序树(Binary Search Tree, BST)。二叉排序树是一种特殊的二叉树,它满足以下条件: 1. 若左子树不为空,则左子树上所有节点的...
3. **掌握排序的ADT设计**,了解如何将排序算法抽象为抽象数据类型(ADT),便于扩展和维护。 4. **掌握排序相关操作的实现方法**,包括不同排序算法的选择与应用。 5. **添加适当的注释**,使得代码易于理解和维护...
(3)中序遍历二叉树:非递归算法(最好也能实现先序,后序非递归算法)。 (4)求二叉树的高度 。 (5)求二叉树的叶子个数。 (6)对于树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。 (8...
1、实现KMP模式匹配算法、哈夫曼编码算法、由遍历序列恢复二叉树、Prim算法、Kruskal算法、Floyd算法、Dijkstra算法、拓扑排序、关键路径算法、二叉排序树生成算法(含平衡化)、哈希表生成及哈希查找算法、希尔排序...
本文讨论了链表、栈、二叉树等数据结构,以及冒泡排序、插入排序、快速排序、选择排序、归并排序等排序算法、二分查找、深度优先搜索、广度优先搜索等搜索算法。这些数据结构和算法都是计算机科学中非常重要的基础...
本文将深入探讨如何利用VC++(Visual C++)编写的二叉树排序算法,并将其封装为DLL(动态链接库),供VB(Visual Basic)程序调用,实现高效的数据排序。在描述中提到的环境下,即CPU为T6670 2.20GHz,内存为2GB,...