二叉树的结构与实现
来源:互联网 发布:台湾erp软件 编辑:程序博客网 时间:2024/05/29 09:16
树型结构是用来存取数据的效率比较好的一种数据结构,增,删,改效率都比前面介绍的数据结构要高。缺点就是实现起来比较复杂。下面以二叉树为例子,来说明数型结构的特点:
请看下例:
二叉树的实现:
class JD {int data;// 数据JD left; // 左儿子JD right;// 右儿子public JD(int data) {this.data = data;}public String toString() {return data + "";}};// 该类实现了增,删,改,查等特性class Tree{JD root;JD parrent;boolean b;public boolean add(int d) {// 增加数据的方法JD jd = new JD(d);if (root == null){ // 如果根节点为空,那么把新节点加给根节点root = jd;}else {JD current = root;while (current != null) {// 是找到一个位置加新节点if (d == current.data)// 如果已经存在,则直接返回false 表示加失败return false;else if (d > current.data) {// 如果该值大于当前节点,那么应该往右边找parrent = current; // 记录要加新节点的父节点b = true; // 记录是左边还是右边,current = current.right;// current.right=current} else if (d < current.data) {parrent = current;b = false;current = current.left;// current.left=current}}// end whileif (b)// 如果是右儿子为空 ,就加父节点的右边parrent.right = jd;elseparrent.left = jd;}return true;}public JD find(int d) {// 查询的方法JD current = root;while (current != null) {if (current.data == d)return current;else {parrent = current;// 记录找到节点的父节点,以方便删除操作if (d > current.data) {current = current.right;b = true;} else if (d < current.data) {current = current.left;b = false;}}}// end whilereturn current;}public boolean delete(int d) {JD current = find(d); if (current == null){return false;}else if (current.left == null && current.right == null) // 如果要删除的节点是页节点{if (current == root)// 如果是根节点(也是页节点),直接让根节点==nullroot = null;else if (b)parrent.right = null;elseparrent.left = null;} else if (current.left == null) {// 如果删除节点只有右节点if (b)parrent.right = current.right;elseparrent.left = current.right;} else if (current.right == null) {// 如果删除节点只有左节点if (b)// 该变量记录了要删除的节点,在其父节点的左边还是右边parrent.right = current.left;elseparrent.left = current.left;} else {JD temp = fenlie(current); // 分裂节点if (b)parrent.right = temp;elseparrent.left = temp;}return true;}public JD fenlie(JD c) {JD temp = c.right;JD p = temp;// 用来记录要删除节点右儿子那边的最小节点JD pp = temp;// 用来记录要删除节点右儿子那边的最小节点的父节点while (temp != null) {// 找到要删除节点右儿子那边的最小节点pp = p;p = temp;temp = temp.left;}if (pp == p) {// 如果删除节点的右儿子节点没有左儿子pp.left = c.left;// 把删除节点左儿子加到删除节点的右儿子的左边return pp;} else {pp.left = p.right;// 把找到的节点的右儿子部分加到该节点父节点的左边p.left = c.left;// 把删除节点的左儿子加到分裂节点的左边p.right = c.right;// 把删除节点的右儿子加到分裂节点的右边return p;}}public boolean modify(int s, int m) {// 修改数据的方法=先删除后增加,这样还是有//顺序的delete(s);return add(m);}public void print(JD jd) {// 递归中序遍历该有序二叉树if (jd != null) {print(jd.left);System.out.print(jd + " ");print(jd.right);}}public void p() {print(root);}}class TestTree {public static void main(String[] args) {Tree t = new Tree();t.add(5);t.add(7);t.add(3);t.add(9);t.add(1);t.add(8);t.add(13);t.add(4);t.p();System.out.println("\n" + "-------------改变----------");t.modify(8, 18);// 把接点值为8的接点,把该值改为18t.delete(9);// 删除接点值为9的接点t.p();}}
运行的结果如图
- 二叉树的结构与实现
- 二叉树结构的实现
- 二叉树类结构的实现
- 二叉树的存储结构和实现
- 二叉树结构的java实现
- 二叉树的链式结构实现
- 二叉树的结构分析及实现
- 线索二叉树结构的实现
- 关于二叉树的结构与遍历
- 数据结构与算法分析笔记与总结(java实现)--二叉树23:树的子结构
- 堆结构(一) - 二叉堆的原理与实现
- 树结构(一) - 二叉树查找树的原理与实现
- 链式结构实现二叉树
- 二叉树顺序结构实现
- 二叉树链式结构实现
- 二叉树顺序结构实现
- JAVA实现二叉树结构
- [数据结构][二叉链表]二叉树链式存储结构的二叉链表实现
- .net面试题及答案2
- 反向代理原理
- UIWebView Touch
- 把一个数组里的组合全部列出来.
- wavecom短信猫常用AT命令
- 二叉树的结构与实现
- 在MFC控件中显示opencv库中的图像或者视频
- listener监听器介绍
- ASP.NET MVC 2中使用AJAX
- tolower
- 资源链接网址
- C语言基础篇LessonOne
- Properties demo
- MySQL update 语句的正确用法