数据结构-二叉树

二叉树
二叉树:每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

二叉树的性质:

  性质1:在二叉树的第 i 层上至多有2i-1个结点。

  性质2:深度为k的二叉树至多有2k-1个结点(k>=1)。

  性质3:对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
  java实现:
  
public class BinaryTreeDemo {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    BinaryTree bt = new BinaryTree();
    bt.addNode(10);
    bt.addNode(15);
    bt.addNode(2);
    bt.addNode(5);
    bt.addNode(8);
    bt.addNode(17);
    bt.print();

}

}

class BinaryTree{
private Node root;

public void addNode(Comparable data){
    if (root == null) {
        root = new Node(data);
    }else{
        root.add(data);
    }
}

public void print(){
    root.print();
}

class Node{
    private Comparable data;
    public Comparable getData() {
        return data;
    }

    public void setData(Comparable data) {
        this.data = data;
    }

    private Node left;
    private Node right;
    public Node(Comparable data){
        this.data = data;
    }

    public void add(Comparable data){
        if (this.data.compareTo(data)>0) {
            if (this.left == null) {
                this.left = new Node(data); 
            }else{
                this.left.add(data);
            }
        }else{
            if (this.right == null) {
                this.right = new Node(data);    
            }else{
                this.right.add(data);
            }
        }
    }

    public void print(){
        if (this.left != null) {
            this.left.print();
        }

        System.out.println(this.getData());

        if (this.right != null) {
            this.right.print();
        }
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值