java用二叉树排序_java中利用二叉树算法进行排序

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 ComparableDemo03{

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Java实现二叉树排序的示例程序: ```java import java.util.ArrayList; import java.util.List; public class BinaryTreeSort { private Node root; /** * 插入节点 * @param value 节点值 */ public void insert(int value) { Node node = new Node(value); if (root == null) { root = node; } else { Node current = root; Node parent; while (true) { parent = current; if (value < current.value) { current = current.left; if (current == null) { parent.left = node; return; } } else { current = current.right; if (current == null) { parent.right = node; return; } } } } } /** * 序遍历二叉树 * @return 排序后的节点值列表 */ public List<Integer> inOrderTraversal() { List<Integer> result = new ArrayList<>(); inOrderTraversal(root, result); return result; } private void inOrderTraversal(Node node, List<Integer> result) { if (node != null) { inOrderTraversal(node.left, result); result.add(node.value); inOrderTraversal(node.right, result); } } /** * 节点类 */ private static class Node { int value; Node left; Node right; Node(int value) { this.value = value; } } public static void main(String[] args) { BinaryTreeSort tree = new BinaryTreeSort(); tree.insert(5); tree.insert(2); tree.insert(8); tree.insert(1); tree.insert(3); tree.insert(7); tree.insert(9); List<Integer> result = tree.inOrderTraversal(); System.out.println(result); } } ``` 该程序,我们定义了一个`Node`类表示二叉树的节点,以及一个`BinaryTreeSort`类实现二叉树排序算法。 在`insert()`方法,我们通过比较节点值的大小,将新节点插入到合适的位置。在`inOrderTraversal()`方法,我们采用序遍历的方式遍历二叉树,将节点值存储到列表,并返回排序后的节点值列表。 最后在`main()`方法创建了一个二叉树,并对其进行了测试。运行程序,输出结果为`[1, 2, 3, 5, 7, 8, 9]`,说明二叉树排序算法已经正确地将节点值排好序了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值