80java比较器(二叉树)

84 阅读2分钟

比较器(二叉树)


一、比较器二叉树释义

在之前学习过链表程序,链表程序的本质是在于节点的互相引用,但是之前的链表有一个缺点:

所有的保存数据顺序就是你的添加顺序,而且无法排序,如果要想进行排序的保存,就可以通过树的结构来完成。

 

  • 二叉树的结构

1、二叉树的结构定义

取第一个数据作为树的根节点,而后比这个根节点大的数据放在节点的右子树,如果比根节点小的数据放在节点的左子树。

在进行输出的时候按照中序遍历的原则取出:左-中-右。

 

2、结构解析

比如:以数据99为根节点

 

80小于99,在99的左子树,成为一个中节点。120大于99,在99的右子树,成为另一个中节点。依次类推。

归纳:

这种树的结构实现的关键就是大小的比较,而这种大小的比较就可以使用Comparable接口来完成。


三、实现二叉树范例

打开simplework - Java EE -

MyProject/src/cn/mldn/demo

新建名称为BTDemo

录入程序


package cn.mldn.demo;

@SuppressWarnings("rawtypes")

class BinaryTree { // 现在实现一个二叉树

private class Node {

private Comparable data ;//保存的操作数据,因为必须是Comparable子类,而且需要判断大小

private Node left ; // 保存左边的节点

private Node right ; // 保存右边节点

@Suppres sWarnings ("unused")

public Node(Comparable data) {

this.data = data ;

}

@Suppres sWarnings ( "unchecked")

public void addNode(Node newNode) {

if (this . data . compareTo(newNode.data) > 0) {

if (this.left == nu11) {

this.left = newNode ;

} else {

this .1eft . addNode(newNode);

}

} else {

  if (this.right == null) {

this.right = newNode ;

} else {

this. right . addNode ( newNode) ;

}

}

}

public void toArrayNode() {

if (this.left != nu1l) { // 右左节点

This.left.toArrayNode();

}

BinaryTree.this.retData[BinaryTree.this.foot++]=this.data ;

if (this.right != nu11) {

this .right . toArrayNode();|

}

}

}

//-------------------------------------------------------//

private Node root ; // 任何的数据结构一定要抓住根

private int count ; // 保存个数

private int foot = 0;

private object [] retData; //返回数据

public object [] toArray() {

this.foot = 0 ; //脚标清零

this.retData = new object [this.count] ;

this. root . toArrayNode() ;

return this.retData ;

}

public void add(object data) { //可以保存任何的数据

if (data == nu11) {

return ;

}

Node newNode = new Node( (Comparable) data) ;

if (this.root == nu11) {

this.root = newNode ;

} else {

this .root . addNode (newNode) ;

}

this.count ++ ;

}

}

public class BTDemo {

public static void main(String[] args) {

BinaryTree bt = new BinaryTree() ;

bt.add("B");

1.  add("X");

bt.add( "A");

System.out.print1n(Arrays.tostring(bt.toArray()));

}

}

 

这就是一个最基本的二叉树。

如果要有兴趣可以继续将之前链表的功能在完整实现。