Java 算法: 实现二叉树的中序排序
程序员文章站
2024-01-18 20:45:58
...
二叉树实现的前提是 : 必须能进行对象比较, 即实现 Comparable 接口
package com.cwq.beyond;
import java.util.Arrays;
@SuppressWarnings("rawtypes")
class BinaryTree{ // 实现一个二叉树
//---------------------------------------------------------//
private class Node{
private Comparable data; // 保存操作数据, 因为必须是Comparable之类,而且必须要判断大小
private Node left ; // 保存左边节点
private Node right ; // 保存右边节点
private Node(Comparable data) {
this.data = data ;
}
public void addNode(Node newNode) {
if (this.data.compareTo(newNode.data) > 0) {
if (this.left == null) {
this.left = newNode;
}else {
this.left.addNode(newNode);
}
}else {
if (this.right == null) {
this.right = newNode;
}else {
this.right.addNode(newNode);
}
}
}
@SuppressWarnings("unused")
public void toArrayNode() { //得到二叉树中序排序后的结果
if (this.left != null) { // 有左节点
this.left.toArrayNode();
}
BinaryTree.this.retData [BinaryTree.this.foot ++] = this.data;
if (this.right != null) {
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) { // 可以保存任何的数据, 必须是 Comparable子类
if (data == null) {
return ;
}
Node newNode = new Node((Comparable) data);
if (this.root == null) {
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("A");
bt.add("X");
bt.add("B");
bt.add("W");
bt.add("C");
System.out.println(Arrays.toString(bt.toArray()));
}
}
下一篇: PHP实现图片压缩的两则实例_PHP