java二叉树的实现

1.代码

package com.xtm.java.test;

import java.util.Arrays;

/**
 * Author: TianMing.Xiong
 * Date: Created in 18-4-23 上午11:02
 */
public class BinaryTree {

    //节点类
    private class Node{
        //数据
        Comparable data ;
        public Node(Comparable data) {
            this.data = data;
        }
        //左子
        Node left;
        //右子
        Node right;
        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);
                }
            }
        }
        //先序:根左右 中序:左根右 后序:左右根
        public void toArray() {
            if(this.left!=null){
                this.left.toArray();
            }
            BinaryTree.this.retData[BinaryTree.this.foot++]=this.data;//中序
            if(this.right!=null){
                this.right.toArray();
            }
        }
    }
    //树根节点
    private Node root ;
    private int count;
    private int foot;
    private Object[] retData;

    public void addNode(Object data){
        Comparable com = (Comparable) data;
        Node newNode = new Node(com);
        if(root==null){
            this.root=newNode;
        }else {
           this.root.addNode(newNode);//添加左右节点应该由节点类实现
        }
        this.count++;
    }

    public Object[] toArray(){
        if(this.root==null){
            return null;
        }else {
            this.foot=0;
            this.retData=new Object[this.count];
            this.root.toArray();
        }
        return this.retData;
    }

    public static void main(String[] args){
        BinaryTree binaryTree = new BinaryTree();
        binaryTree.addNode(new Person("zhansan",30));
        binaryTree.addNode(new Person("lisi",20));
        binaryTree.addNode(new Person("wangsu",31));
        binaryTree.addNode(new Person("zhaoliu",19));
        Object[] objects = binaryTree.toArray();
        System.out.println(Arrays.toString(objects));
    }
}
class Person implements Comparable<Person>{
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Person person) {
        if(this.age>person.age){
            return 1;
        }else if(this.age<person.age) {
            return -1;
        }
        return 0;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

执行结果:

[Person{name='zhaoliu', age=19},
 Person{name='lisi', age=20},
 Person{name='zhansan', age=30}, 
Person{name='wangsu', age=31}]




猜你喜欢

转载自blog.csdn.net/qq_17441227/article/details/80091979