二叉树(和链表一样都是动态数据结构)
二叉树具有天然递归结构
每个节点的左子树也是二叉树
每个节点的右子树也是二叉树
二叉树不一定是"满"的
二分搜索树(存储的元素必须有可比较性)
二分树的节点创建
代码我分开这样 更好让人理解,
package com.binglian.BST;
import java.awt.image.RescaleOp;
import java.util.Stack;
/**
* 二分树(递归实现)
*
* e.compareTo(node.e)返回值 。
* 如果指定的数与参数相等返回0
* 如果指定的数小于参数返回 -1
* 如果指定的数大于参数返回 1。
* @author binglian
*
*/
public class BST<E extends Comparable<E>> {
/**
* 节点
* @author binglian
*
*/
private class Node{
public E e;
public Node left,right;
public Node(E e){
this.e=e;
left=null;
right=null;
}
}
private Node root;
private int size;
public BST(){
root=null;
size=0;
}
public int size(){
return size;
}
public boolean isEmpty(){
return size ==0;
}
}
二分树添加元素
创建一个public,让外部进行调用,在创建一个private进行内部调用,public调用private
//向二分搜索树中添加新的元素e
public void add(E e){
root=add(root, e);
}
//向以node为根的二分搜索树中插入元素e,递归算法
//返回插入新节点后二分搜索树的根
private Node add(Node node,E e){
if(node == null){
size++;
return new Node(e);
}
if(e.compareTo(node.e) <0)
node.left=add(node.left, e);
else if(e.compareTo(node.e) >0)
node.right=add(node.right, e);
return node;
}
二分树搜索
//看二分搜索树中是否包含元素e
public boolean contains(E e){
return contains(root,e);
}
//看以node为根的二分搜索树中是否包含元素e,递归算法
private boolean contains(Node node,E e){
if(node == null)
return false;
if(e.compareTo(node.e) == 0)
return true;
else if(e.compareTo(node.e) <0)
return contains(node.left,e);
else//e.compareTo(node.e)>0
return contains(node.right,e);
}