今天第一次接触了“树”这种数据结构,和双向链表差不多(一个父亲有多个儿子……)
为了加深理解,老师让我们做一个搜索二叉树~
二叉树 顾名思义就是有两个叉子的树,也是用得比较多的一种,
搜索二叉树的优点就是简化搜索步骤:
一个节点左面的子节点的数据比这个节点小,右面的子节点比这个数据大,把这样的小树连起来,就是搜索二叉树了
比如我要把{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) 初始,平衡二叉树为空树,操作界面给出查找、插入和删除三种操作供选择。每种操作均要...
剑指offer面试题(7)——重建二叉树整体工程代码,C++语言实现。
查找课程设计——包括二叉树查找(C语言版)绝对无错的
数据结构实验——分类二叉树和堆排序
本代码是在windows平台下vs2008上编译通过,包含搜索二叉树的插入,查找和删除算法(采用递归和非递归两种方法)。包含全部在平台下的文件,解压可以直接运行。
数据结构(C++)上课笔记——线索二叉树的概念与C++实现(2020-5-12),详细记录上课内容,并附有可调试成功的代码,很好的复习、编程参考资料
数据结构(清华大学版)——树和二叉树
用C语言编写的遍历二叉树程序,包括先序、中序、后序、层序4总算法,完整的上机报告,报告中有程序源代码,经编译通过。
以二叉链表为存储结构,实现二叉树的创建、遍历(先序,中序,后序遍历)算法
数据结构课程设计&平衡二叉树的实现;数据结构课程设计&平衡二叉树的实现;数据结构课程设计&平衡二叉树的实现
数据结构很讲究算法,我这个写的很好!!用C#语言写的,试试看,相信给你好处的。
数据结构——二叉树c语言源码,数据结构——二叉树c语言源码
C++思维导图Xmind文件和.png文件: 构造函数与析构函数思维导图...模板——初识 STL——string类 STL——vector STL适配器——stack && queue STL——list C++——继承 C++——搜索二叉树 C++——AVL树 C++——红黑树
6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树 6.4 线索二叉树 6.5 树和森林 6.6 哈夫曼树
树和二叉树 C语言描述
(1)以二叉链表作为存储结构,从键盘以先序次序输入各个结点(空格字符表示空树)建立一棵二叉树; (2)对(1)中生成的二叉树进行判空; (3)对(1)中生成的二叉树进行遍历(分别实现先序遍历、中序遍历、后序...
数据结构——二叉树的实现,包含二叉链表和左子右兄弟两种实现方法
该文件包括二叉树的头文件(BitTree开头)和堆栈的头文件(Seq开头),另外还实现了编写按层次顺序(同一层自左至右)遍历二叉树的算法、后序递归遍历计算二叉树的深度的算法、判断给定二叉树是否为完全二叉树(通过...