一个应用二叉树基本算法的程序

#include  < conio.h >
#include 
< stdio.h >
#include 
< stdlib.h >

#define  OK 1
#define  ERROR 0
#define  TRUE 1
#define  FALSE 0
#define  OVERFLOW -2
typedef 
int  status;

typedef 
struct  BiNode
{
    
char Data;
    
struct BiNode* lChild;
    
struct BiNode* rChild;
}
BiNode, * pBiNode;

status CreateTree(BiNode
**  pTree);
status PreOrderTraval(BiNode
*  pTree);
status Visit(
char  Data);
status Display(BiNode
*  pTree, int  Level);
status Clear(BiNode
*  pTree);

BiNode 
* pRoot = NULL;

main()
{
    clrscr();
    CreateTree(
&pRoot);

    printf(
" PreOrder:");
    PreOrderTraval(pRoot);
    printf(
" ");

    printf(
" InOrder:");
    InOrderTraval(pRoot);
    printf(
" ");

    printf(
" PostOrder:");
    PostOrderTraval(pRoot);
    printf(
" ");

    printf(
" ShowLeaves:");
    ShowLeaves(pRoot);
    printf(
" ----------------------- ");
    printf(
" ");

    Display(pRoot,
0);

    printf(
" ");
    printf(
" Deleting Tree: ");
    DelTree(pRoot);
    printf(
"BiTree Deleted.");

    getch();
}

status CreateTree(BiNode
**  pTree)  /*Input Example: abd##e##cf##g##*/
{
    
char ch;
    scanf(
"%c",&ch);
    
if(ch=='#')
    
{
        (
*pTree)=NULL;
    }

    
else
    
{
        
if(!((*pTree)=(BiNode*)malloc(sizeof(BiNode))))
        
{
            exit(OVERFLOW);
        }

        (
*pTree)->Data=ch;
        CreateTree(
&((*pTree)->lChild));
        CreateTree(
&((*pTree)->rChild));
    }

return OK;
}

status PreOrderTraval(BiNode
*  pTree)
{
    
if(pTree)
    
{
        
if(Visit(pTree->Data))
        
{
            
if(PreOrderTraval(pTree->lChild))
            
{
                
if(PreOrderTraval(pTree->rChild))
                
{
                    
return OK;
                }

            }

        }

        
return ERROR;
    }

    
else
    
{
        
return OK;
    }

}

status InOrderTraval(BiNode
*  pTree)
{
    
if(pTree)
    
{
        
if(InOrderTraval(pTree->lChild))
        
{
            
if(Visit(pTree->Data))
            
{
                
if(InOrderTraval(pTree->rChild))
                
{
                    
return OK;
                }

            }

            
return ERROR;
        }

        
return ERROR;
    }

    
else
    
{
        
return OK;
    }

}

status PostOrderTraval(BiNode
*  pTree)
{
    
if(pTree)
    
{
        
if(PostOrderTraval(pTree->lChild))
        
{
            
if(PostOrderTraval(pTree->rChild))
            
{
                
if(Visit(pTree->Data))
                
{
                    
return OK;
                }

                
return ERROR;
            }

        }

        
return ERROR;
    }

    
else
    
{
        
return OK;
    }

}

status Visit(
char  Data)
{
    printf(
"%c",Data);
    
return OK;
}

status Display(BiNode
*  pTree, int  Level)
{
    
int i;
    
if(pTree==NULL) return;
    Display(pTree
->lChild,Level+1);
    
for(i=0;i<Level-1;i++)
    
{
        printf(
" ");
    }

    
if(Level>=1)
    
{
        printf(
"--");
    }

    printf(
"%c ",pTree->Data);
    Display(pTree
->rChild,Level+1);
}

status ShowLeaves(BiNode
*  pTree)
{
    
if(pTree)
    
{
        
if(ShowLeaves(pTree->lChild))
        
{
            
if(ShowLeaves(pTree->rChild))
            
{
                
if((pTree->lChild==NULL)&&(pTree->rChild==NULL))
                
{
                    
if(!Visit(pTree->Data))
                    
{
                        
return ERROR;
                    }

                }
 
                
return OK;
            }

        }

        
return ERROR;
    }

    
else
    
{
        
return OK;
    }

}

status DelTree(BiNode
*  pTree)
{
    
if(pTree)
    
{
        
if(DelTree(pTree->lChild))
        
{
            
if(DelTree(pTree->rChild))
            
{
                printf(
"Deleting %c ",pTree->Data);
                free((
void*)pTree);
                
return OK;
            }

        }

        
return ERROR;
    }

    
else
    
{
        
return OK;
    }

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值