# include <stdio.h> # include <stdlib.h> # include <string.h> # include <iostream> # define OK 0; # define ERROR -1; typedef int TElemType; typedef char DataType; typedef int Status; typedef struct BiNode { DataType data;//存自定义类型的值 struct BiNode *lchild, *rchild;//左右小孩指针 }BiNode,*BiTree; void CreatBiNode(BiNode **Node)//此处应注意传递的参数(二重指针) { char data; scanf_s("%c", &data); *Node = (BiTree)malloc(sizeof(BiNode)); if (data == '#') { *Node = NULL; } else if ((data != '#') && (*Node)) { (*Node)->data = data; (*Node)->lchild = NULL; (*Node)->rchild = NULL; CreatBiNode(&(*Node)->lchild); CreatBiNode(&(*Node)->rchild); } } Status PreOrderTraverse(BiTree T) { if (T == NULL) { return OK; } else { printf("%c", T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } } Status InOrderTraverse(BiTree T) { if (T == NULL) { return OK; } else { InOrderTraverse(T->lchild); printf("%c", T->data); InOrderTraverse(T->rchild); } } Status PostOrderTraverse(BiTree T) { if (T == NULL) { return OK; } else { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%c", T->data); } } int main() { printf("先序输入二叉树(空结点用'#'表示):"); BiTree T=NULL; CreatBiNode(&T); printf("先序遍历二叉树:"); PreOrderTraverse(T); printf("\n中序遍历二叉树:"); InOrderTraverse(T); printf("\n后序遍历二叉树:"); PostOrderTraverse(T); system("pause"); return 0; }
解决思想:小生用的是递归创建二叉树,递归遍历二叉树,因为使用递归会比较简洁。(主要就是递归啦)。
PS:如若有人看见小生此篇blog,多多评价和指教哈~,先在此谢过啦!