03-树1. List Leaves (25)

来源:http://www.cnblogs.com/wgqtmac/p/4404630.html

#include <stdio.h> 
#include <stdlib.h> 
#define MAXSIZE 10 
  
typedef struct TreeNode { 
    int data; 
    int tLeft; 
    int tRight; 
    struct TreeNode *left; 
    struct TreeNode *right; 
    struct TreeNode *next; 
} tNode, *pNode; 
  
  
typedef struct TreeQuene { 
    pNode front; 
    pNode rear; 
}tQuene, *pQuene; 
  
pQuene CreateQuene(); 
void AddQ(pQuene q, pNode node); 
pNode DeleteQ(pQuene q); 
//void OrderTraver(int root, pNode tPointArray[]); 
int IsEmptyQuene(pQuene q); 
  
  
int main() 
{ 
    int lines, i; 
    int left, right; 
    char strleft, strright; 
    pNode tPointerArray[MAXSIZE]; 
    pNode tPointer; 
  
    scanf("%d", &lines); 
    int flag[MAXSIZE] = { 
        0 
    }; 
    for (i = 0; i < lines; i++) { 
        tPointer = (pNode)malloc(sizeof(tNode)); 
        getchar(); 
        scanf("%c %c", &strleft, &strright); 
        if (strleft == '-') { 
            left = -1; 
        } else { 
            left = (int)(strleft - '0'); 
            flag[left] = 1; 
        } 
  
        if (strright == '-') { 
            right = -1; 
        } else { 
            right = (int)(strright - '0'); 
            flag[right] = 1; 
        } 
          
        tPointer->data = i; 
        tPointer->tLeft = left; 
        tPointer->tRight = right; 
        tPointer->left = NULL; 
        tPointer->right = NULL; 
        tPointerArray[i] = tPointer; 
    } 
  
    int rootIndex; 
    for (i = 0; i < lines; i++) { 
        if (flag[i] != 1) { 
            rootIndex = i; 
        } 
    } 
  
    //create Tree 
    for (i = 0; i < lines; i++) { 
        if (tPointerArray[i]->tLeft != -1) { 
            tPointerArray[i]->left = tPointerArray[(tPointerArray[i]->tLeft)]; 
        } else { 
            tPointerArray[i]->left = NULL; 
        } 
        if (tPointerArray[i]->tRight != -1) { 
            tPointerArray[i]->right = tPointerArray[(tPointerArray[i]->tRight)]; 
        } else { 
            tPointerArray[i]->right = NULL; 
        } 
          
    } 
  
    //root index 
    pNode root = tPointerArray[rootIndex]; 
  
    //levelOrderTravelsal 
    pQuene quene = CreateQuene(); 
    AddQ(quene, root); 
    int flagg = 1; 
    while (!IsEmptyQuene(quene)) { 
        pNode node = DeleteQ(quene); 
        if (!(node->left) && !(node->right)) { 
            if (flagg) { 
                printf("%d", node->data); 
                flagg = 0; 
            } else { 
                printf(" %d", node->data); 
            } 
        } 
  
        if (node->left) { 
            AddQ(quene, node->left); 
        } 
        if (node->right) { 
            AddQ(quene, node->right); 
        } 
    } 
  
    return 0; 
} 
  
pQuene CreateQuene() 
{ 
    pQuene q = (pQuene)malloc(sizeof(tQuene)); 
    q->front = NULL; 
    q->rear = NULL; 
    return q; 
} 
  
void AddQ(pQuene q, pNode node) 
{ 
    if (!(q->rear)) { 
        q->rear = node; 
    } else { 
        q->rear->next = node; 
        q->rear = node; 
    } 
  
    if (!(q->front)) { 
        q->front = node; 
    } 
} 
  
pNode DeleteQ(pQuene q) 
{ 
    pNode temp = q->front; 
    if (temp) { 
        q->front = q->front->next; 
        return temp; 
    } else { 
        return NULL; 
    } 
} 
  
int IsEmptyQuene(pQuene q) 
{ 
    if (q->front == NULL) { 
        return 1; 
    } else { 
        return 0; 
    } 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值