现在的位置: 首页 > 综合 > 正文

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

2014年02月02日 ⁄ 综合 ⁄ 共 2867字 ⁄ 字号 评论关闭
#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)

抱歉!评论已关闭.