二叉树的递归创建,三种遍历:
#include <stdio.h> #include <stdlib.h> #define ERROE 0 typedef char ElementType; typedef struct BinTree { ElementType data; struct Bintree* lchild, * rchild; }BinTree,*Tree; //按照前序遍历输入二叉树结点值,#表示空结点 void CreatBinTree(Tree* T) { ElementType data; scanf_s("%c", &data); if (data == '#') *(T) = NULL; else { *T = (Tree)malloc(sizeof(BinTree)); if (*T == NULL) exit(ERROE); else { (*T)->data = data; CreatBinTree(&((*T)->lchild)); CreatBinTree(&((*T)->rchild)); } } } void PreOrderTraverse(Tree T, int level) { if (T) { printf_s("%c in level %d ", T->data, level + 1); PreOrderTraverse(T->lchild, level + 1); PreOrderTraverse(T->rchild, level + 1); } } void InOrderTraverse(Tree T, int level) { if (T) { PreOrderTraverse(T->lchild, level + 1); printf_s("%c in level %d ", T->data, level + 1); PreOrderTraverse(T->rchild, level + 1); } } void PostOrderTraverse(Tree T, int level) { if (T) { PreOrderTraverse(T->lchild, level + 1); PreOrderTraverse(T->rchild, level + 1); printf_s("%c in level %d ", T->data, level + 1); } } int main() { Tree T; printf_s("Creat Binary Tree "); CreatBinTree(&T); printf_s("Pre "); PreOrderTraverse(T, 0); printf_s("In "); InOrderTraverse(T, 0); printf_s("Post "); PostOrderTraverse(T, 0); system("pause"); return 1; }