03-树1. List Leaves (25)

来源:互联网 发布:虚拟社交网络弊大于利 编辑:程序博客网 时间:2024/05/20 20:57

来源: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;     } }


0 0
原创粉丝点击