本文共 2094 字,大约阅读时间需要 6 分钟。
BinaryTree.h头文件
#pragma once#define _CRT_SECURE_NO_WARNINGS#include#include #include typedef char ElemType; typedef struct node { char c; struct node* left; struct node* right; }Node,*pNode;typedef struct quene { pNode InsertPos; struct quene* next;}Quene, *pQuene;void preOrder(pNode p);void midOrder(pNode p);void latOrder(pNode p);void buildBinaryTree(pNode* treeRoot, pQuene* queHead, pQuene* queTail, ElemType value);void clearQuene(pQuene* queHead);
BinaryTree.c文件
#include "BinaryTree.h"void preOrder(pNode p){ if (p != NULL) { putchar(p->c); preOrder(p->left); preOrder(p->right); }}void midOrder(pNode p){ if (p != NULL) { midOrder(p->left); putchar(p->c); midOrder(p->right); }}void latOrder(pNode p){ if (p != NULL) { latOrder(p->left); latOrder(p->right); putchar(p->c); }}void buildBinaryTree(pNode* treeRoot, pQuene* queHead, pQuene* queTail, ElemType value){ pNode treeNew = (pNode)calloc(1, sizeof(Node)); pQuene queNew = (pQuene)calloc(1, sizeof(Quene)); pQuene queCur = *queHead; treeNew->c = value; queNew->InsertPos = treeNew; if (NULL == *treeRoot) { *treeRoot = treeNew; *queHead = queNew; *queTail = queNew; } else { (*queTail)->next = queNew; *queTail = queNew; if (NULL == queCur->InsertPos->left) { queCur->InsertPos->left = treeNew; } else if (NULL == queCur->InsertPos->right) { queCur->InsertPos->right = treeNew; *queHead = queCur->next; free(queCur); queCur = NULL; } }}void clearQuene(pQuene* queHead){ pQuene queCur; while (*queHead) { queCur = *queHead; *queHead = queCur->next; free(queCur); }}
main.c文件
#include "BinaryTree.h"int main(){ ElemType val; pNode treeRoot = NULL; pQuene queHead = NULL, queTail = NULL; while (scanf("%c", &val) != EOF) { if (val == '\n') { break; } buildBinaryTree(&treeRoot, &queHead, &queTail, val); } clearQuene(&queHead); preOrder(treeRoot); printf("\n-----------------------\n"); midOrder(treeRoot); printf("\n-----------------------\n"); latOrder(treeRoot); return 0;}
转载地址:http://nxxmb.baihongyu.com/