#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef struct BIT_Node{// char data; struct BIT_Node *lchild; struct BIT_Node *rchild; }BIT_Node,*BITree; char ch; void CreateBiTree(BITree *T){ scanf("%c",&ch); if(ch=='#'){ (*T)=NULL; }else{ (*T)=(BITree)malloc(sizeof(BIT_Node));//连接 (*T)->data=ch; CreateBiTree(&(*T)->lchild);//建立左孩子 CreateBiTree(&(*T)->rchild);//建立右孩子 } } void preOrderTraverse(BITree T,int level) { if(T==NULL)return; else { printf("%c ",T->data);//先序遍历,意思是我先跑根节点,再跑左节点,再跑右节点 preOrderTraverse(T->lchild,level+1); preOrderTraverse(T->rchild,level+1); } } void OrderTraverse(BITree T,int level) { if(T==NULL)return; else { OrderTraverse(T->lchild,level+1); printf("%c ",T->data);//中序遍历,意思是我先跑左节点再根,再右节点,再根 OrderTraverse(T->rchild,level+1); } } void PostorderTraverse(BITree T,int level) { if (T==NULL)return; else { PostorderTraverse(T->lchild,level+1); PostorderTraverse(T->rchild,level+1); printf("%c ",T->data);//后序遍历,意思是我先跑左节点,再右节点,再根。 } } int main(){ int level=1; BITree T = NULL; CreateBiTree(&T);//二叉树的建立,需要地址传递或者引用传递,否则建立了只在函数内部起作用 printf("先序遍历:"); preOrderTraverse(T,1); printf(" "); printf("中序遍历:"); OrderTraverse(T,1); printf(" "); printf("后序遍历:"); PostorderTraverse(T,1); printf(" "); return 0; }