实现代码
递归实现
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;
}
}
}