【数据结构与算法】二叉树元素的添加与查找代码(Java实现)

实现代码

递归实现

package binarytree;

public class binarytree<Key extends Comparable, Value> {
private Node root;
private int N;

public binarytree() {
    this.root = null;
    this.N = 0;
}
public int getsize(){
    return N;
}
public Node put(Key key, Value value) {
    root=put(root, key, value);
    return root;
}
public Node put(Node x, Key key, Value value) {
    if (x==null){
        N++;
        return new Node(key,value,null,null);
    }
    int cmp=key.compareTo(x.key);
    if (cmp>0){
        x.right= put(x.right,key, value);
    }
    else if (cmp<0){
        x.left=put(x.left, key, value);
    }
    else{
        x.value=value;
    }
    return x;
}
public Value get(Key key){
    return get(root, key);
}
public Value get(Node x, Key key) {
    if (x==null){
        return null;
    }
    int cmp=key.compareTo(x.key);
    if (cmp>0){
        x.value= get(x.right, key);
    }
    else if (cmp<0){
        x.value=get(x.left, key);
    }
    return x.value;
}

private class Node(){
    public Key key;
    private Value value;
    public Node left;
    public Node right;
    public Node(Key key, Value value, Node left, Node right) {
        this.key = key;
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

}

测试代码

package binarytree;

public class binarytree_demo {
public static void main(String[] args) {
binarytree<Integer,String> bt=new binarytree<>();
bt.put(5,“aaa”);
bt.put(8,“bbb”);
bt.put(1,“ccc”);
bt.put(7,“ddd”);
bt.put(4,“eee”);
bt.put(9,“fff”);
System.out.println(bt.getsize());
System.out.println(bt.get(5));
}
}

非递归实现

package binarytree;

public class binarytree<Key extends Comparable, Value> {
private Node root;
private int N;

public binarytree() {
    this.root = null;
    this.N = 0;
}
public int getsize(){
    return N;
}
public Node put(Key key, Value value) {
    Node node=root;
    if (node==null){
        root=new Node(key,value,null,null);
        N++;
        return root;
    }
    while(true){
        int cmp=key.compareTo(node.key);
        if (cmp>0){
            if (node.right==null){
                Node newnode=new Node(key,value,null,null);
                node.right=newnode;
                N++;
                return newnode;
            }
            node=node.right;
        }
        else if (cmp<0){
            if (node.left==null){
                Node newnode=new Node(key,value,null,null);
                node.left=newnode;
                N++;
                return newnode;
            }
            node=node.left;
        }
        else{
            node.value=value;
            return node;
        }
    }
}
public Value get(Key key){
    Node node=root;
    if (node==null){
        return null;
    }
    while(true){
        int cmp=key.compareTo(node.key);
        if (cmp>0){
            node=node.right;
        }
        else if (cmp<0){
            node=node.left;
        }
        else{
            return node.value;
        }
    }
}

private class Node{
    public Key key;
    private Value value;
    public Node left;
    public Node right;
    public Node(Key key, Value value, Node left, Node right) {
        this.key = key;
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值