#include #include int count; typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree &t) { // getchar(); char c; //二叉树的链式存储结构 scanf(\"%c\ if(c!='\\n') { if(c==' ') t=NULL; else { t->data=c; t->lchild=(BiTree)malloc(sizeof(BiTNode)); CreateBiTree(t->lchild); t->rchild=(BiTree)malloc(sizeof(BiTNode)); CreateBiTree(t->rchild); } } } void visit(char e) { printf(\"%c \ } void PreOrder(BiTree t,void (* visit)(char e)) { if(t) { visit(t->data); PreOrder(t->lchild,visit); PreOrder(t->rchild,visit); } } void InOrder(BiTree t,void (* visit)(char e)) { if(t) { InOrder(t->lchild,visit); visit(t->data); InOrder(t->rchild,visit); } } void PostOrder(BiTree t,void (* visit)(char e)) { if(t) { PostOrder(t->lchild,visit); PostOrder(t->rchild,visit); visit(t->data); } } void Count(char e) { count++; } void PreOrder2(BiTree t,void (* Count)(char e)) { if(t) { Count(t->data); PreOrder2(t->lchild,Count); PreOrder2(t->rchild,Count); } } void TreeHigh(BiTree t) { count=0; PreOrder2(t,Count); for(int i=1;i<=100;i++) { if((pow(2,i)-1)==count) printf(\"二叉树的高度为:%d\\n\ else if(((pow(2,i)-1) printf(\"二叉树的高度为:%d\\n\ } } void main() { BiTree T=(BiTree)malloc(sizeof(BiTNode)); //定义二叉树的头指针 int choice; printf(\" 选择菜单\\n\"); printf(\" 1、建立二叉链表\\n\"); printf(\" 2、先序遍历(递归算法)\\n\"); printf(\" 3、中序遍历(递归算法)\\n\"); printf(\" 4、后序遍历(递归算法)\\n\"); printf(\" 5、中序遍历(非递归算法)\\n\"); printf(\" 6、求二叉树的高度\\n\"); printf(\" 7、求二叉树叶子个数\\n\"); printf(\" 8、借助队列实现二叉树层次遍历\\n\"); printf(\"请输入您的选择:\"); while(scanf(\"%d\ { switch(choice) { case 1: getchar(); CreateBiTree(T); printf(\"请重新输入您的选择:\"); break; case 2: PreOrder(T,visit); printf(\"\\n请重新输入您的选择:\"); break; case 3: InOrder(T,visit); printf(\"\\n请重新输入您的选择:\"); break; case 4: PostOrder(T,visit); printf(\"\\n请重新输入您的选择:\"); break; case 6: TreeHigh(T); printf(\"请重新输入您的选择:\"); break; } } } 因篇幅问题不能全部显示,请点此查看更多更全内容