用二级指针求解二叉树根节点

来源:互联网 发布:高校大数据平台 编辑:程序博客网 时间:2024/05/22 12:43

写了这个算法,总算有点理解二级指针了。

 

#include <stdio.h>
#include 
<stdlib.h>
#define OVERFLOW -2
#define INFEASIBLE -1
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0

typedef 
int TElemType;
TElemType Nil
=0;

typedef 
struct BiTNode
{
    TElemType data;
    BiTNode 
*lchild,*rchild;
}
BiTNode,*BiTree;

int InitBiTree(BiTree *T)
{
    
*T=NULL;
    
return OK;
}


void CreateBiTree(BiTree *T)
{
    TElemType ch;
    scanf(
"%d",&ch);
    
if(ch==Nil)
        (
*T)=NULL;
    
else
    
{
        (
*T)=(BiTree)malloc(sizeof(BiTNode));
        
if(!(*T))
            exit(OVERFLOW);
        (
*T)->data=ch;
        CreateBiTree(
&(*T)->lchild);
        CreateBiTree(
&(*T)->rchild);
    }

}


int BiTreeEmpty(BiTree *T)
 
// 初始条件: 二叉树T存在
   
// 操作结果: 若T为空二叉树,则返回TRUE,否则FALSE
   if(*T)
     
return FALSE;
   
else
     
return TRUE;
 }


 TElemType Root(BiTree 
*T)
 
// 初始条件: 二叉树T存在。操作结果: 返回T的根
   if(BiTreeEmpty(&(*T)))
     
return Nil;
   
else
     
return (*T)->data;
 }


 
void main()
 
{
     TElemType e;
     BiTNode
* T;
     InitBiTree(
&T);
     printf(
"请先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为左子树的二叉树) ");
     CreateBiTree(
&T);
     e
=Root(&T);
     
if(e==0)printf("二叉树无根节点!/n");
     
else
     printf(
"二叉树根结点:%d ",e);
 }

因为在CreateBiTree() 中会分配内存给数据,所以主函数内不进行内存分配,即不按如下定义:

BiTNode T;

原创粉丝点击