解释,T是这颗二叉树的根,key是要查找的关键字,f用来存储当前节点的父节点,p表示如果找到key,则key是当前节点,不过没找到,则是当前的这个空节点的父节点f
如果查找成功,返回true,如果失败返回false,然后将新节点插入到f的孩子中
boolean Search(BiTree T, int key, BiTree f, BiTree p)
{
if(T==null)
{
p == f;
return false;
}
if(T.data == key)
{
p == T;
return true;
}
else if(T.data > key)
{
return Search(T.lchild,key,T,p);
}
else
{
return Search(T.rchild,key,T,p);
}
}
动态插入节点,构建二叉排序树
boolean Insert(BiTree T, int key)
{
if(!Search(T,key,null,p))
{
BiTree e = new BiTree(key);
if(p==null)//说明f是null,说明一开始就是一颗空树
{
T = e;
}
else if(p.data > key)
p.lchild = e;
else
p.rchild = e;
retrun true;
}else{
return false //树中已经存在该node
}
}
- //求出父亲节点,在定义节点类BSTreeNode的时候,没有申明父亲节点,所以这里专门用parent用来输出父亲节点
- public BSTreeNode parent(BSTreeNode k){
- BSTreeNode p=rootNode;
- BSTreeNode tmp=null;
- while(p!=null&&p.data!=k.data){//最后的p为p。data等于k.data的节点,tmp为p的父亲节点
- if(p.data>k.data){
- tmp=p;//临时存放父亲节点
- p=p.left;
- }else{
- tmp=p;//临时存放父亲节点
- p=p.right;
- }
- }
- return tmp;
- }