欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()));
	}
	
}

Java 算法: 实现二叉树的中序排序