1、 按先序次序输入二叉树中结点的值(一个字符),`@`表示空树,生成二叉树的二叉链表存储结构。
2、 按先、中、后序递归遍历二叉树,之后结合栈的应用,将中序遍历算法改为非递归算法。
3、利用二叉树的递归算法求二叉树的高度 。
4、利用二叉树的递归算法求二叉树的叶子个数。
5、编写一个主函数,调试上述算法。
#include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct Node { ElemType data; struct Node *lchild,*rchild; } BTNode,*BiTree; int m=0,n=0; BiTree creat() { BiTree T; ElemType data; scanf("%c",&data); if(data=='@') T=NULL ; else { T=(BiTree)malloc(sizeof(BTNode)); T->data=data; T->lchild=creat(); T->rchild=creat(); } return T; } void bianli1(BiTree T) { if(T) { printf("%c",T->data); bianli1(T->lchild); bianli1(T->rchild); } } void bianli2(BiTree T) { if(T) { bianli2(T->lchild); printf("%c",T->data); bianli2(T->rchild); } } void bianli3(BiTree T) { if(T) { bianli3(T->lchild); bianli3(T->rchild); printf("%c",T->data); } } void fdg(BiTree T) { BTNode tt[1000]; int top=-1; BTNode *p=T; BTNode *q; int i=0; while(p||top!=-1) { if(p) { tt[++top]=(*p); p=p->lchild; } else { q=&(tt[top--]); printf("%c",q->data); p=q->rchild; } } } int yezi(BiTree T) { if(T==NULL) return 0; if(T->lchild==NULL&&T->rchild==NULL) return 1; return (yezi(T->lchild)+yezi(T->rchild)); } int height(BiTree T) { if(T==NULL) return 0; else { m=height(T->lchild); n=height(T->rchild); if(m>n) return m+1; else return n+1; } } int main() { BiTree T=creat(); //creat(&T); puts("创建成功"); puts("\n先序遍历"); bianli1(T); puts("\n中序遍历"); bianli2(T); puts("\n后序遍历"); bianli3(T); puts("\n非递归中序遍历"); fdg(T); puts(""); printf("树的高度为%d\n",height(T)); printf("树的叶子数为%d\n",yezi(T)); return 0; }