`
jcs130
  • 浏览: 131382 次
  • 性别: Icon_minigender_1
  • 来自: Ottawa
社区版块
存档分类
最新评论

初识“树”——搜索二叉树

 
阅读更多

今天第一次接触了“树”这种数据结构,和双向链表差不多(一个父亲有多个儿子……)

 

为了加深理解,老师让我们做一个搜索二叉树~

 

二叉树 顾名思义就是有两个叉子的树,也是用得比较多的一种,

 

搜索二叉树的优点就是简化搜索步骤:

 

一个节点左面的子节点的数据比这个节点小,右面的子节点比这个数据大,把这样的小树连起来,就是搜索二叉树了

 

比如我要把{4,1,3,2,5}这样一个数组放入搜索二叉树,那么得到的树就如下如所示:


这样,如果搜索的数比4小,那就找根节点左面的那一支,如果比1大,就搜索1右面的那一支,这样递归搜所,效率会比从头开始搜索高。

 

另外一个比较简单的应用就是用这个二叉树把数组排序

 

从小到大输出就是按照 左→根→右的顺序输出就好了~

 

下面是新建节点类的代码:

/**
 * 树的节点
 * @author Micro
 *
 */
public class TreeNode {
	private int obj;
	private TreeNode root;
	private TreeNode left;
	private TreeNode right;
	
	//重载构造器
	public TreeNode(int obj){
		this.obj=obj;
	}
	public int getObj() {
		return obj;
	}
	public void setObj(int obj) {
		this.obj = obj;
	}
	public TreeNode getRoot() {
		return root;
	}
	public void setRoot(TreeNode root) {
		this.root = root;
	}
	public TreeNode getLeft() {
		return left;
	}
	public void setLeft(TreeNode left) {
		this.left = left;
	}
	public TreeNode getRight() {
		return right;
	}
	public void setRight(TreeNode right) {
		this.right = right;
	}
	
	
}

 

下面是创建二叉树的方法,输出的方法还有程序入口

 

/**
 * 数组变成搜索二叉树
 * 
 * @author Micro
 * 
 */
public class TreeTest {
	private static TreeNode root = null;

	// static int n = 0;

	// 程序入口
	public static void main(String[] args) {
		TreeTest ts = new TreeTest();
		int[] a = { 4, 1, 3, 2,5};
		for (int i = 0; i < a.length; i++) {
			ts.add(a[i]);
		}
		// System.out.println(root.getObj());
		ts.print(root);
		// System.out.println(n);
	}

	// 放入树
	public void putin(TreeNode i, TreeNode j) {
		if (i.getObj() < j.getObj()) {
			if (j.getLeft() == null) {
				j.setLeft(i);
				i.setRoot(j);
			} else {
				putin(i, j.getLeft());
			}
		} else {
			if (j.getRight() == null) {
				j.setRight(i);
				i.setRoot(j);
			} else {
				putin(i, j.getRight());
			}
		}
	}

	// 添加树节点
	public void add(int i) {
		TreeNode fat = null;
		TreeNode newTree = new TreeNode(i);
		if (root == null) {
			root = newTree;
		} else {
			fat = root;
			putin(newTree, fat);
		}

	}

	// 遍历节点
	public void print(TreeNode a) {
		if(a!=null) {
			print(a.getLeft());
			System.out.println(a.getObj());
			print(a.getRight());
		}
	}

}

输出的结果是:

1

2

3

4

5  

达到目的了~

 

这样一个搜索二叉树就完成了,我对于二叉树也有了基本的了解,接下来就是要研究研究五十年前那个叫哈夫曼的人种下的树了~哈~

  • 大小: 13.3 KB
1
2
分享到:
评论

相关推荐

    【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归)

    【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归) 在计算机科学中,数据结构是存储和组织数据的方式,它直接影响到数据的处理效率。搜索二叉树(BST,Binary Search Tree)是一种特殊类型的数据结构,...

    广工数据结构课程设计——平衡二叉树操作的演示

    广工数据结构课程设计——平衡二叉树操作的演示 内含源代码、可执行程序以及相应的说明文档 实验的功能包括: [实现提示] (1) 初始,平衡二叉树为空树,操作界面给出查找、插入和删除三种操作供选择。每种操作均要...

    广工数据结构实验——平衡二叉树

    平衡二叉树是二叉搜索树(Binary Search Tree, BST)的一个变体,它通过保持树的高度平衡来确保查找、插入和删除操作的高效性。 平衡二叉树的主要目标是避免最坏情况下的高度失衡,这可能导致搜索时间复杂度上升至O...

    查找课程设计——包括二叉树查找(C语言版)

    查找课程设计——包括二叉树查找(C语言版)绝对无错的

    数据结构——创建二叉树

    "数据结构——创建二叉树" 在计算机科学中,二叉树是一种重要的数据结构,广泛应用于各个领域。以二叉链表为存储结构,实现二叉树的创建、遍历算法是数据结构课程的基础知识点。本文将详细介绍二叉树的逻辑特点、...

    数据结构上机实验——遍历二叉树

    数据结构上机实验——遍历二叉树 在计算机科学中,二叉树是一种重要的数据结构,遍历二叉树是指按某种次序访问二叉树中的结点,使每个结点访问一次且仅访问一次。本文将详细介绍二叉树的遍历算法,包括先序、中序、...

    数据结构课程设计——平衡二叉树的实现

    - **查询树结点**:使用递归搜索函数BSTree_search,从根节点开始比较关键字,直到找到目标节点或确定不存在为止。 - **插入树结点**:InsertAVL函数会检查节点是否已存在,若不存在,则根据节点的关键字与当前节点...

    数据结构(清华大学版)——树和二叉树

    数据结构(清华大学版)——树和二叉树

    数据结构实验——分类二叉树和堆排序.doc

    【数据结构实验——分类二叉树和堆排序】 在数据结构的学习中,分类二叉树和堆排序是两个重要的概念,它们在实际的编程和算法设计中有着广泛的应用。本实验旨在让学生深入理解和掌握这两种数据结构及其操作。 分类...

    剑指offer面试题(7)——重建二叉树

    【重建二叉树】是计算机科学中一个经典的数据结构问题,主要出现在算法和数据结构的面试中,尤其在像《剑指Offer》这样的面试指南中经常出现。这道题目要求根据给定的前序遍历和中序遍历序列来重建原始的二叉树结构...

    数据结构——线索二叉树排序

    数据结构很讲究算法,我这个写的很好!!用C#语言写的,试试看,相信给你好处的。

    数据结构——二叉树c语言源码

    数据结构——二叉树c语言源码,数据结构——二叉树c语言源码

    数据结构——树和二叉树

    数据结构中的树和二叉树是计算机科学中重要的抽象数据类型,它们在计算机领域有着广泛的应用,例如在文件系统、数据库索引、编译器设计、图形用户界面等多个方面都有所体现。清华大学版的数据结构教材深入浅出地介绍...

    C++思维导图Xmind文件和.png文件(持续更新)

    C++思维导图Xmind文件和.png文件: 构造函数与析构函数思维导图...模板——初识 STL——string类 STL——vector STL适配器——stack && queue STL——list C++——继承 C++——搜索二叉树 C++——AVL树 C++——红黑树

    数据结构实验报告——二叉树

    ### 数据结构实验报告——二叉树 #### 实验概述与目的 本次实验的主题是围绕“二叉树”这一核心概念展开。二叉树作为一种重要的非线性数据结构,在计算机科学中有着广泛的应用,例如在搜索算法、排序算法、编译器...

    树与二叉树的转换

    二叉树是树的一种特殊形式,每个节点最多只有两个子节点,通常分为左子节点和右子节点。树与二叉树之间的转换是一个重要的概念,尤其是在数据结构和算法的学习中。下面我们将详细探讨这个主题。 一、树到二叉树的...

    数据结构——二叉树有关操作程序

    (1)以二叉链表作为存储结构,从键盘以先序次序输入各个结点(空格字符表示空树)建立一棵二叉树; (2)对(1)中生成的二叉树进行判空; (3)对(1)中生成的二叉树进行遍历(分别实现先序遍历、中序遍历、后序...

Global site tag (gtag.js) - Google Analytics