二叉排序树

自闭症网瘾萝莉.ら 提交于 2019-11-28 23:01:15

特点:

  若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

  若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

  左、右子树也分别为二叉排序树,这点很重要,

 

 

代码:

 

 

 1 package Tree;
 2 
 3 public class SortTree {
 4     public static void main(String[] args) {
 5       //添加
 6       int array[] = {1,4,6,2,8,3,12,90,45,32,89};
 7       BinarySortTree binarySortTree = new BinarySortTree();
 8       //循环添加结点
 9       for (int i = 0 ; i < array.length ; i++){
10           binarySortTree.addNode(new Node(array[i]));
11       }
12 
13       //中序遍历
14       binarySortTree.preOrder();
15     }
16 }
17 class BinarySortTree{
18     //根结点
19     private Node root;
20 
21     public void setRoot(Node root) {
22         this.root = root;
23     }
24 
25     //添加结点
26     public void addNode(Node node){
27         if (this.root == null){
28             root = node;
29         }else {
30             this.root.addNode(node);
31         }
32     }
33 
34     //先序遍历
35     public void preOrder(){
36         if (this.root != null){
37             this.root.preOrder();
38         }else {
39             System.out.println("空树");
40         }
41     }
42 }
43 class Node{
44     int value;//结点的值
45     Node left;//左子树
46     Node right;//右子树
47     public Node(int value) {
48         this.value = value;
49     }
50     @Override
51     public String toString() {
52         return "Node{" +
53                 "value=" + value +
54                 '}';
55     }
56     //添加结点
57     public void addNode(Node node){
58         if (node == null){
59             return;
60         }
61         if (node.value < this.value){
62             if (this.left == null){
63                 this.left = node;
64             }else {
65                 this.left.addNode(node);
66             }
67         }
68         else {
69             if (node.value > this.value){
70                 if (this.right == null){
71                     this.right = node;
72                 }else {
73                     this.right.addNode(node);
74                 }
75             }
76         }
77     }
78 
79     //前序遍历
80     public void preOrder() {
81         //输出root结点
82         System.out.println(this);
83         if (this.left != null) {
84             this.left.preOrder();//递归左子结点
85         }
86         if (this.right != null) {
87             this.right.preOrder();
88         }
89     }
90 }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!