二叉树插入操作
/* 功能:将一个节点插入到二叉树中节点的子节点中 输入: p,c ,RL p:节点将插入到p所指向的节点的子节点中 c:指向待插入的节点 RL:为0表示插入到左子树,为1表示插入到右子树 输出:bool */ template<typename T> bool BinaryTree<T>::InsertChild(BTNode<T> *p,BTNode<T> *c,int RL) { if(p) { if(RL==0) //插入到p的左节点 { c->rchild=p->lchild;//p节点原有的左子树成为c的右子树 p->lchild=c;//c成为p的左子树 } else { c->rchild=p->rchild; p->rchild=c; } return true; } else return false; }
如下有一个二叉树和一个节点,其中p指向节点2,c指向节点6。现在需要将c插入到p的左子树中。
RL为0,c的右子结点指针(本来指向NULL)指向 p的左子节点(4)
将指向p左子节点的指针 指向c所指向的节点(6)
插入子节点完成
另一种实现形式:
template<typename T> bool BinaryTree<T>::InsertChild(T e,T c,int RL) { BTNode<T> *pe,*pc; pe=SearchNode(e); if(pe) { pc=new BTNode<T>; pc->data=c; pc->lchild=NULL; pc->rchild=NULL; if(RL==0) { pc->rchild=pe->lchild; pe->lchild=pc; } else { pc->rchild=pe->rchild; pe->rchild=pc; } return true; } cout<<"结点"<<e<<"不存在"<<endl; return false; }