二叉树:三叉链表

//三叉链表 
#ifndef _PBITREE_H
#define _PBITREE_H 
#incldue "BiTree.h" //包含二叉链表的头文件(见上一篇文章)
//结点结构体
templatestruct PBiTNode{T data;PBiTNode *lchild,*rchild,*parent;}; 
 
  
//类模板:继承自BiTree
template 
class PBiTree: public BiTree{
	//静态函数 
	static void VisitParent(BiTNode &c){
		if(c.lchild) c.lchild->parent=&c;
		if(c.rchild) c.rchild->parent=&c;
	}
	///////////////// //和二叉链表相比,需要修改Parent //////////////////////////////////// 
	public:
	   void CreateFromFile(ifstrem&f){
	   		BiTree::CreateFromFile(f);
	   		
	   		OrderTraverse(root,Pre,VisitParent);  //此处不同:先序遍历二叉树,对结点的parent进行赋值 
	   	    root->parent=NULL; 
	   } 	  
	   bool InsertChild(PBiTNode* &p,bool LR,PBiTRee &c){
	   	    BiTree::InsertChild(p,LR,c);
			if(p){
				if(!LR){
				 	p->lchild->parent=p;
				 	if(p->lchild->rchild) p->lchild->rchild->parent=p->lchild;
				}else{
					p->rchild=p;
					if(p->rchild->rchild) p->rchild->rchild->parent=p->rchild;   
				} 
				return true;	
			  } 
			return false;
	   } 
	   BiTNode* Parent(BiTNode *p) const{
	        return p->parent; 
	   }
	   bool Sibling(BiTNode *p,BiTNode* &sib,bool &LR)  const{
	        BiTNode *q=p->parent;   //仅此处不同 
	        if(!q)  return false; 
	        if(q->lchild==p){
	        	sib=q->rchild; LR=true;
			}else{
				sib=q->lchild; LR=false;
			}
			return sib!=NULL;		
	   }
};
#endif


你可能感兴趣的:(数据结构)