我也不会二叉树,今天就学学

二叉树的构成

二叉树由节点(node)和边组成。节点分为根节点、父节点、子节点。



红色是根节点(root)。蓝色是子节点也是父节点,绿色的是子节点。

其余的线是边。节点和链表中的节点一样都可以存放数据信息。

* 通常来说树是顶部小,底部大,且树呈分层结构。

* root节点时第0层,以此类推。二叉树最多有两个节点。
*
* 二叉树一个节点左子节点的关键字小于这个节点,

* 右子节点关键字大于或等于这个父节点。


创建一个树节点包含左节点引用和右节点引用

public class Node {

public int iData;

public double dDate;

public Node leftNode;//左节点

public Node rightNode;//右节点

private Node root;//根节点


//最大值和最小值查找,

//应为是从root开始查找,那么最小值肯定是在root的左面,最大值肯定是在root的右面

//最小值存在于一棵树的最下的左node,最大值存在于一棵树的最大的有node

public Node[] mVal(){
Node minNode = null;
Node maxNode = null;

//创建一个数组用来保存最大和最小值
Node[] minmaxnode = new Node[2];

//从根节点开始,把根节点赋值给current
Node current = root;

//死循环,只要当前node不为null,就把它左面的node赋值给current,一直到最后一个,就是最小的了

while (current != null){

//假设这个值是最小node
minNode = current;

//再把这个node左面的node赋值给crrrent,知道为null,循环就退出了
current = current.leftNode;
}

minmaxnode[0] = minNode;

//找最大的
current = root;

while(current != null){
maxNode = current;

current = current.rightNode;
}

minmaxnode[1]= maxNode;
return minmaxnode;
}


//查找数据
public Node find(int key){

//从根节点开始
Node current = root;

//如果传入的值和根节点的值不一致,继续,否则返回根节点
//死循环,下一个current就是下面赋值给的左面或者是右面的节点,直到满足条件,找到需要的值

while (current.iData != key){

//如果节点的值比key大,那么就把左面的节点赋值给当前
if(current.iData > key){

current = root.leftNode;
}else{
current = root.rightNode;
}

//到这里就直接全部遍历完了都没有找到
if(current == null){
return null;
}
}
return current;
}



//往二叉树中插入数据,插入的过程中会比较大小,所以查找的时间也是比较快


public void insert(int iData ,double dDate){

//创建node节点
Node newNode = new Node();
newNode.iData = iData;
newNode.dDate = dDate;

//如果根节点没有值,那么刚创建的节点就是根节点
if(root == null){
root = newNode;
}else{

//把根节点赋值给current节点
Node current = root;

//创建一个parent节点保存根节点
Node parent;

while (true){
//最终根据节点遍历到左节点或者右节点为null
//然后把新创建的节点赋值给当前current节点的左右节点
//保存current变为null之前的父节点

parent =current;

//如果插入的数据比根节点的左面的数据小
if(iData < current.iData){

//那就遍历左面的节点,每次都把左面的节点赋值给current
current = current.leftNode;

//如果current,也就左面的这个节点为null,那么就把新节点放到左面
if(current == null){
parent.leftNode = newNode;

return;
}
}else {
current = current.rightNode;
if(current == null){
parent.rightNode = newNode;
return;
}
}
}
}
}


}