二叉链表结点结构定义 :
typedef struct Node
    
{ DataType data;
       
strct Node * LChild;
       
struct Node * RChild;
    
}BiTNode, *BiTree;
1、 先序遍历
void  PreOrder(BiTree root)
       
{ if (root!=NULL)
{Visit(root->data);                     
PreOrder(root
->LChild);    
 PreOrder(root ->RChild);
     
}
 }
2、中序遍历
void  InOrder(BiTree
root) 
        
{if (root!=NULL)
   { InOrder(root
->LChild);    
 
Visit(root->data);                     
InOrder(root
->RChild);  
         
}
   }
3、 后序遍历
void  PostOrder(BiTree
root) 
   
{if(root!=NULL)
   { PostOrder(root
->LChild);
     
PostOrder(root ->RChild);
     
Visit(root
->data);                   
       
}
二、 输出二叉树中的叶子结点
void  PreOrder(BiTree root)
   /{  if
(root!=NULL)
    
{if (root ->LChild==NULL
&& root
->RChild==NULL)
             
printf(root->data);                 
        
PreOrder(root->LChild);       
         
PreOrder(root->RChild);                  
}
    
}
三、 统计叶子结点数目
void leaf(BiTree root)
{  if(root!=NULL)
     
{leaf(root->LChild);
   
leaf(root->RChild);
        
if (root ->LChild==NULL
&& root
->RChild==NULL)
           
LeafCount++;
   }
}
用“扩展先序遍历序列”创建二叉链表的算法
void CreateBiTree(BiTree *bt)
{ char ch;
  ch=getchar();
  if(ch==' ^ ') *bt=NULL;
  else
    
{*bt=(BiTree)malloc(sizeof(BiTNode));
       
(*bt)->data=ch;
       
CreateBiTree(&((*bt)->LChild)); 
       
CreateBiTree(&((*bt)->RChild));
     
}
 }
后序遍历求二叉树的高度递归算法
int PostTreeDepth(BiTree bt)
{  int hl,hr,max;
 if(bt!=NULL)
  {
hl=PostTreeDepth(bt->LChild);      
hr=PostTreeDepth(bt->RChild);       
max=hl>hr?hl:hr;              
 
return(max+1);              
   }
  else
return(0);                   
}
中序线索化算法
void  Inthread(BiTree root)
 {  if (root!=NULL)
 
{Inthread(root->LChild);                
    if
(root->LChild==NULL)
      
{root->Ltag=1; root->LChile=pre;} /
*置前驱线索 */}
    if
(pre!=NULL&&
pre->RChild==NULL)  
       
{pre->rtag=1 ;pre-> RChild=root;
}
   
pre=root;
   
Inthread(root->RChild);              
    
    
}
   }
遍历线索树可分为两步:
1、求出被访问的第1个结点(以中序为例)
BiTNode * Infirst(BiTNode * bt)
{  BiTNode *p=bt;
   
if(p=null)  return(null);
    while
(p->ltag==0)    
p= p->Lchild;
   
return(p);   }
2、连续访问后继结点
void yinorder(BiTNode bt)
{  BiTNode *p;
    p=
Infirst(bt);
    while
(p!=null)  
{visit(p);p=innext(p);}  
 }
1、插入结点运算
void InsNode(BiTNode * p ,  BiTNode * r)
  
{if(p->Rtag==1)   
      
{  
r->RChild=p->RChild;
       
 r->Rtag=1;
        
p->RChild=r;   
r->LChild=p;
   
r->Ltag=1;   }
      
else 
      
{  
s=p->RChild;
        
while(s->Ltag==0)      
  s=s->LChild;
         
s->LChild=r;
        
r->RChild=p->RChild;      
r->Rtag=0;
        
r->LChild=p;           
r->Ltag=1;
        
p->RChild=r; }
}
 
 
 
							
		 
						
		加载中,请稍候......