基于Comparable接口实现二叉树操作
2016-07-11 19:35
316 查看
//基于Comparable接口实现二叉树操作
class BinaryTree{
class Node{
// 声明一个节点类
private Comparable data ;
// 保存具体的内容
private Node left ;
// 保存左子树
private Node right ;
// 保存右子树
public Node(Comparable data){
this.data = data ;
}
public void addNode(Node newNode){
// 确定是放在左子树还是右子树
if(newNode.data.compareTo(this.data)<0){
// 内容小,放在左子树
if(this.left==null){
this.left = newNode ;
// 直接将新的节点设置成左子树
}else{
this.left.addNode(newNode) ;
// 继续向下判断
}
}
if(newNode.data.compareTo(this.data)>=0){
// 放在右子树
if(this.right==null){
this.right = newNode ;
// 没有右子树则将此节点设置成右子树
}else{
this.right.addNode(newNode) ;
// 继续向下判断
}
}
}
public void printNode(){
// 输出的时候采用中序遍历
if(this.left!=null){
this.left.printNode() ;
// 输出左子树
}
System.out.print(this.data + "\t") ;
if(this.right!=null){
this.right.printNode() ;
}
}
};
private Node root ;
// 根元素
public void add(Comparable data){
// 加入元素
Node newNode = new Node(data) ;
// 定义新的节点
if(root==null){
// 没有根节点
root = newNode ;
// 第一个元素作为根节点
}else{
root.addNode(newNode) ; // 确定是放在左子树还是放在右子树
}
}
public void print(){
this.root.printNode() ;
// 通过根节点输出
}
}
public class Test{
public static void main(String args[]){
BinaryTree bt = new BinaryTree() ;
bt.add(8) ;
bt.add(3) ;
bt.add(3) ;
bt.add(10) ;
bt.add(9) ;
bt.add(1) ;
bt.add(5) ;
bt.add(5) ;
System.out.println("排序之后的结果:") ;
bt.print() ;
}
}
运行结果:
排序之后的结果:
1 3 3
5 5
8 9 10
class BinaryTree{
class Node{
// 声明一个节点类
private Comparable data ;
// 保存具体的内容
private Node left ;
// 保存左子树
private Node right ;
// 保存右子树
public Node(Comparable data){
this.data = data ;
}
public void addNode(Node newNode){
// 确定是放在左子树还是右子树
if(newNode.data.compareTo(this.data)<0){
// 内容小,放在左子树
if(this.left==null){
this.left = newNode ;
// 直接将新的节点设置成左子树
}else{
this.left.addNode(newNode) ;
// 继续向下判断
}
}
if(newNode.data.compareTo(this.data)>=0){
// 放在右子树
if(this.right==null){
this.right = newNode ;
// 没有右子树则将此节点设置成右子树
}else{
this.right.addNode(newNode) ;
// 继续向下判断
}
}
}
public void printNode(){
// 输出的时候采用中序遍历
if(this.left!=null){
this.left.printNode() ;
// 输出左子树
}
System.out.print(this.data + "\t") ;
if(this.right!=null){
this.right.printNode() ;
}
}
};
private Node root ;
// 根元素
public void add(Comparable data){
// 加入元素
Node newNode = new Node(data) ;
// 定义新的节点
if(root==null){
// 没有根节点
root = newNode ;
// 第一个元素作为根节点
}else{
root.addNode(newNode) ; // 确定是放在左子树还是放在右子树
}
}
public void print(){
this.root.printNode() ;
// 通过根节点输出
}
}
public class Test{
public static void main(String args[]){
BinaryTree bt = new BinaryTree() ;
bt.add(8) ;
bt.add(3) ;
bt.add(3) ;
bt.add(10) ;
bt.add(9) ;
bt.add(1) ;
bt.add(5) ;
bt.add(5) ;
System.out.println("排序之后的结果:") ;
bt.print() ;
}
}
运行结果:
排序之后的结果:
1 3 3
5 5
8 9 10
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- C#非递归先序遍历二叉树实例
- C++将二叉树转为双向链表及判断两个链表是否相交
- C++非递归建立二叉树实例
- C语言实现找出二叉树中某个值的所有路径的方法
- C++实现二叉树遍历序列的求解方法
- C语言实现二叉树遍历的迭代算法
- C++实现查找二叉树中和为某一值的所有路径的示例
- 用C语言判断一个二叉树是否为另一个的子结构
- C++实现二叉树非递归遍历方法实例总结
- C++二叉树结构的建立与基本操作
- 深入遍历二叉树的各种操作详解(非递归遍历)
- Python实现二叉树结构与进行二叉树遍历的方法详解