資料結構#號建立樹法
阿新 • • 發佈:2019-01-02
// 井建立二叉樹.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include<stdlib.h> #include<stdio.h> using namespace std; typedef struct BiTNode { int data; BiTNode *lchild, *rchild; }; typedef struct BiTNode* Bitree; //按照先序方法建立二叉樹 BiTNode * CreateBiThrTree() { BiTNode *node = NULL; BiTNode *pl = NULL; BiTNode *pr = NULL; char h; scanf("%c ",&h); if (h=='#') { return NULL; } else { node = (BiTNode *)malloc(sizeof(BiTNode)); memset(node,0,sizeof(BiTNode)); node->data = h;//生成根節點(前序) pl= CreateBiThrTree(); if (pl!=NULL) { node->lchild = pl; } else { node->lchild = NULL; } pr= CreateBiThrTree(); if (pr!=NULL) { node->rchild = pr; } else { node->rchild = NULL; } } return node; } //用後序方法釋放二叉樹 void FreeTree(BiTNode *root) { if (root==NULL) { return; } if (root->lchild != NULL) { FreeTree(root->lchild); root->lchild = NULL; } if (root->rchild!=NULL) { FreeTree(root->rchild); root->rchild = NULL; } if (root!=NULL) { free(root); root = NULL; } } //中序遍歷 void InOrder(BiTNode *root) { if (root == NULL) { return; } //遍歷左子樹 InOrder(root->lchild); printf("%d ", root->data); //遍歷右子樹 InOrder(root->rchild); } int main() { BiTNode *P = NULL; P=CreateBiThrTree(); printf("\n遞迴遍歷\n"); InOrder(P); FreeTree(P); return 0; }