二叉树:
①元素。
②左右节点。
public class Node {
public E e;
public Node left,right;
Node(E e){
this.e = e;
this.left = null;
this.right = null;
}
二分搜索树
---------一定是可比较的元素。左孩子<节点<右孩子
增查操作:
package com.company;
import java.util.Queue;
public class BST<E extends Comparable> {
public Node root;
public int size;
public int row = 1;
public BST(){
root = null; //null也是一个二叉树,因为他有空的左右孩子
size = 0;
}
//查询大小
public int getSize9(){
return size;
}
//查询是否为空
public boolean isEmpty(){
return size==0;
}
//添加元素
public void add(E e ){
if (root == null) {
root = new Node(e);
size++;
}
else add(root,e);
}
private void add(Node pont,E e){ //第二种思路就是理解null也是二叉树,而且如果走到了null节点的二叉树就一定要添加元素
if (e.equals(pont.e)) return;
else if (e.compareTo((E) pont.e) < 0 && pont.left == null){
pont.left = new Node(e);
size++;
return;
}
else if(e.compareTo((E)pont.e)>0 && pont.right == null){
pont.right = new Node(e);
size++;
return;
}
else {
if (e.compareTo((E) pont.e) < 0) add(pont.left,e); //*pont.left/right以这样的方式传参数他可以向下走*
else if(e.compareTo((E)pont.e)>0 ) add(pont.right,e);
}
}
//查询元素
public void Inquire(E e){
Inquire(root,e);
}
private void Inquire(Node pont,E e){
if(pont == null){
System.out.println("不包含"+e);
return;
}
else if(e.compareTo((E) pont.e) < 0){
row++;
Inquire(pont.left,e);
}
else if(e.compareTo((E) pont.e) > 0){
row++;
Inquire(pont.right,e);
}
else{
System.out.println("第"+row+"行");
}
}
//删除元素
public void Delete(E e){
}
}
二分搜索树中序遍历(顺序树)
public void postOder(){
postOder(root);
}
public void postOder(Node pont){
if (pont == null) return; //null作为结束点
postOder(pont.right);
System.out.println(pont.e);
postOder(pont.left);
}