二叉树排序算法


二叉树排序的基本原理:使用第一个元素作为根节点,如果之后的元素比第一个小,则放到左子树,否则放到右子树,之后按中序遍历。

下面实现一个二叉树排序的比较算法,为了操作方便,使用Integer类完成。

public final class Integer extends Number implements Comparable<Integer>

我们可以看到Integer类实现了Comparable接口,所以可用Integer实例化Comparable接口对象。

 1 class BinaryTree{
 2     class Node{          //声明一个节点类
 3         private Comparable data;  //节点的数据类型为Comparable
 4         private Node left;   //保存左子树
 5         private Node right;  //保存右子树
 6         public Node(Comparable data){   //构造函数
 7             this.data = data;
 8         }
 9         public void addNode(Node newNode){
10             //确定是放在左子树还是右子树
11             if(newNode.data.compareTo(this.data)<0){  //新节点值小于当前节点
12                 if(this.left == null){
13                     this.left = newNode;  //左子树为空的话,新节点设为左子树
14                 }else{
15                     this.left.addNode(newNode); //否则继续向下判断
16                 }
17             }else{  //新节点的值大于或等于当前节点
18                 if(this.right == null){
19                     this.right = newNode;
20                 }else{
21                     this.right.addNode(newNode);
22                 }
23             }
24         }
25         
26         public void printNode(){  //采用中序遍历
27             if(this.left != null){   //如果不为空先输出左子树
28                 this.left.printNode();
29             }
30             System.out.print(this.data+"\t");  //输出当前根节点
31             if(this.right != null){  //输出右子树
32                 this.right.printNode();  
33             }
34         }
35     }
36     private Node root;    //表示根元素
37     
38     public void add(Comparable data){    //向二叉树中插入元素
39         Node newNode = new Node(data);
40         if(root == null){   //没有根节点
41             root = newNode;
42         }else{
43             root.addNode(newNode); //判断放在左子树还是右子树
44         }
45     }
46     
47     public void print(){
48         root.printNode();   //根据根节点输出
49     }
50 }
51 
52 public class TestBinaryTreeSort {
53     public static void main(String args[]){
54         BinaryTree bt = new BinaryTree();
55         bt.add(3);
56         bt.add(5);
57         bt.add(4);
58         bt.add(8);
59         bt.add(7);
60         bt.add(8);
61         bt.add(1);
62         bt.print();
63     }
64 }

 

打赏

免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2021 CODEPRJ.COM