数据结构之树(Java 实现版)

实现功能:

  1.实现了树的构建;

  2.实现了树的前序递归遍历、后序递归遍历、中序递归遍历;

 1 class BinaryTreeNode{
 2         int data;
 3         BinaryTreeNode leftNode = null, rightNode = null;
 4
 5         public void setBinaryTreeNode(int data) {
 6             this.data = data;
 7         }
 8         public void setLeftNode(BinaryTreeNode leftNode) {
 9             this.leftNode = leftNode;
10         }
11         public void setRightNode(BinaryTreeNode rightNode) {
12             this.rightNode = rightNode;
13         }
14     }
15
16 class BinaryTree{
17     BinaryTreeNode[] btn;
18     BinaryTreeNode rooNode;
19     int NodeSize;
20
21     public BinaryTree(int[] arrayNode) {
22         NodeSize = arrayNode.length;
23         btn = new BinaryTreeNode[NodeSize];
24
25         //把arrayNode元素转化为节点
26         for(int i = 0; i < NodeSize; i++){
27             btn[i] = new BinaryTreeNode();
28             btn[i].setBinaryTreeNode(arrayNode[i]);
29             if(i == 0){
30                 rooNode = btn[i];
31             }
32         }
33         //把二叉树的左右子树节点补全
34         for(int j = 0; j <= (NodeSize - 2)/2; j++){
35             btn[j].setLeftNode(btn[2*j + 1]);
36             btn[j].setRightNode(btn[2*j + 2]);
37         }
38     }
39     //递归方法前序遍历
40     void preOrder(BinaryTreeNode btn){
41         BinaryTreeNode root = btn;
42         if(root != null){
43             printNode(root);
44             inOrder(root.leftNode);
45             inOrder(root.rightNode);
46         }
47     }
48     //递归方法中序遍历
49     void inOrder(BinaryTreeNode btn){
50         BinaryTreeNode root = btn;
51
52         if(root != null){
53             inOrder(root.leftNode);
54             printNode(root);
55             inOrder(root.rightNode);
56         }
57     }
58     //递归方法后序遍历
59     void postOrder(BinaryTreeNode btn){
60         BinaryTreeNode root = btn;
61
62         if(root != null){
63             postOrder(root.leftNode);
64             postOrder(root.rightNode);
65             printNode(root);
66         }
67     }
68     //打印节点信息
69     static void printNode(BinaryTreeNode btn){
70         int a = btn.data;
71         System.out.println(a);
72     }
73 }
74
75 public class Tree {
76     public static void main(String[] args) {
77         int[] arrayNode = new int[]{1,2,3,4,5,6,7,8,9};
78         BinaryTree bt = new BinaryTree(arrayNode);
79         System.out.println("inOrder:");
80         bt.inOrder(bt.rooNode);
81         System.out.println("preOrder:");
82         bt.preOrder(bt.rooNode);
83         System.out.println("postOrder:");
84         bt.postOrder(bt.rooNode);
85     }
86 }
时间: 2024-08-25 08:09:35

数据结构之树(Java 实现版)的相关文章

数据结构与问题求解-Java语言描述(第三版)

数据结构对程序的重要性不言而喻,用java语言来实现常见的一些数据结构,以及在相应数据结构上的操作对学习java的同学来说是必须掌握的. 本系列博文参考<数据结构与问题求解-Java语言描述(第三版)>来实现 在自己学习的过程中,更希望有机会与大家交流. PS :本人是菜鸟,只是用博客的方式激励自己.请轻喷.Fighting!

数据结构-伸展树

声明:本文是对某高中生的竞赛论文学习的文章 介绍: 二叉查找树能够支持多种动态集合操作.对于一个含有n个结点的完全二叉树,这些操作的最还情况运行时间是O(lgn),但如果树是含有n个结点的线性链,则这些操作的最坏情况运行时间为O(n).而像红黑树.AVL树这种二叉查找树的变形在最坏情况下,仍能保持较好性能. 本文将要介绍的伸展树也是二叉查找树的变形,它对空间要求及编程难度的要求相对不高. 伸展树: 伸展树与二叉查找树一样,具有有序性.即伸展树的每一个结点x满足:该结点的左子树中的每个元素都小于x

HDU 1394 Minimum Inversion Number (数据结构-线段树)

Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9514    Accepted Submission(s): 5860 Problem Description The inversion number of a given number sequence a1, a2, ..., an

数据结构排序算法Java实现

闲的无聊又拿起了大学的数据结构的书看起来 <数据结构(c语言版)>严蔚敏 吴伟民编著. 里面有几个排序算法,感觉挺好玩的,就想着写出来玩玩. package test.sort; /** * @Title: TODO * @Description: TODO * @author: * @date: 2014-8-10 上午11:20:43 * */ public class quickSort { private static int datas[] = {23,42,12,45,56,63,

数据结构之树与二叉树(理论篇)

一.树 树的定义:树是n(n>=0)个结点的有限集. 对于任意一棵非空树:(1)有且仅有一个特定的结点称为根结点:(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,T3···,Tm,其中每一个集合本身又是一棵树,并且称为根的子树. 结点:树的结点包含一个数据元素及若干指向其子树的分支. 度(degree):结点拥有的子树数称为结点的度. 叶子(leaf):度为0的结点称为叶子或终端结点:度不为0的结点称为非终端结点或分支结点,除根结点外,分支结点也称为内部节点.

B树Java代码实现以及测试

B树定义 B 树又叫平衡多路查找树.一棵m阶的B 树 (m叉树)的特性如下: 根节点至少有两个孩子 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子. 每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字.并以升序排列. key[i]和key[i+1]之间的孩子节点的值介于key[i]和key[i+1]之间. 所有的叶子节点都在同一层. 注意:B-树,即为B树. B树Java实现 /** * 一颗B树的简单实现. * * @param <K> - 键类型 * @para

CF #261 div2 D. Pashmak and Parmida&amp;#39;s problem (树状数组版)

Parmida is a clever girl and she wants to participate in Olympiads this year. Of course she wants her partner to be clever too (although he's not)! Parmida has prepared the following test problem for Pashmak. There is a sequence a that consists of n

AVL树----java

                                                                                    AVL树----java AVL树是高度平衡的二叉查找树 1.单旋转LL旋转 理解记忆:1.在不平衡的节点的左孩子的左孩子插入导致的不平衡,所以叫LL private AVLTreeNode<T> leftLeftRotation(AVLTreeNode<T> k2) { AVLTreeNode<T> k

gogotester java jar 版 可用于linux mac windows 版本

http://files.cnblogs.com/tmpt/target.zip 转载请注明出处.添加了代码混淆.不过有兴趣可以关注我将要发出的git版本.地址稍后发出. 这个软件,在googleCode上有公开的project下载,但是只有exe版本的 : https://code.google.com/p/gogo-tester 无奈mac,还要下虚拟机,crossover,各种,都不好用.还是写个通用版本的吧. google code上有源码分享,虽然不懂.NET,但是还是能了解个大概的.

javascript实现数据结构: 树和森林

树的3种常用链表结构 1 双亲表示法(顺序存储结构) 优点:parent(tree, x)操作可以在常量时间内实现 缺点:求结点的孩子时需要遍历整个结构 用一组连续的存储空间来存储树的结点,同时在每个结点中附加一个指示器(整数域) ,用以指示双亲结点的位置(下标值) . 图所示是一棵树及其双亲表示的存储结构.这种存储结构利用了任一结点的父结点唯一的性质.可以方便地直接找到任一结点的父结点,但求结点的子结点时需要扫描整个数组. 代码实现: 1 // 1.双亲表示法 2 // 优点:parent(t