構造一顆二叉樹,輸出其先序遍歷,後序遍歷,中序遍歷
阿新 • • 發佈:2019-02-04
#include <stdio.h>
#include <stdlib.h>
#define OVERFLOW 0 typedef struct Node { char data; struct Node *lchild,*rchild; } Node,*BiTree; BiTree Create(BiTree T)//以先序遍歷的方法構造二叉樹 { char c; scanf("%c",&c); if(c == '#') { T = NULL; } else { T = (BiTree)malloc(sizeof(Node)); if(T == NULL) { exit(OVERFLOW); } T -> data = c; T -> lchild = Create(T -> lchild); T -> rchild = Create(T -> rchild); } return T; } void PreOrder(BiTree T)//先序遍歷 { if(T) { printf("%c",T -> data); PreOrder(T -> lchild); PreOrder(T -> rchild); } } void InOrder(BiTree T)//中序遍歷 { if(T) { InOrder(T -> lchild); printf("%c",T -> data); InOrder(T -> rchild); } } void PostOrder(BiTree T)//後序遍歷 { if(T) { PostOrder(T -> lchild); PostOrder(T -> rchild); printf("%c",T -> data); } } int main() { printf("請輸入二叉樹的先序遍歷,以#代替空\n"); BiTree T = NULL; T = Create(T); printf("先序遍歷結果:"); PreOrder(T); printf("\n"); printf("中序遍歷結果:"); InOrder(T); printf("\n"); printf("後序遍歷結果:"); PostOrder(T); printf("\n"); return 0; }
比如一個二叉樹先序遍歷為:ABDECFG
中序遍歷為:DBEACGF
想象這棵二叉樹為滿二叉樹,對於那些實際不存在的結點,用#代替
則應該輸入:ABD##E##C#FG###