非递归和递归算法计算二叉树节点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非递归和递归算法计算二叉树节点∙#include "stdio.h"
∙#include "stdlib.h"
∙#define MAXSIZE 12500
∙typedef struct BitNode{
∙char c;
∙BitNode * lchild,rchild;
∙}*BitTree;
∙非递归算法中用栈来存放结点
∙用w来计算叶子的个数
∙int w=0;
∙typedef struct stack{
∙ int top;
∙ BitTree Maxsize[MAXSIZE];
∙}*Stack;
∙创建二叉树
∙void creat(BitNode * T){
∙char c;
∙scanf("%d",&c);
∙if(c==' ')
∙T=null;
∙else{
∙T=(BitNode *)malloc(sizeof(BitNode *));
∙T->data=c;
∙creat(T->lchild);
∙creat(T->rchild);
∙}
∙}
∙
∙使用非递归算法求叶子节点数
∙void printTree(BitTree T){
∙初始化栈
∙Stack s;
∙s=(Stack*)malloc(sizeof(Stack *));
∙s->top=0;
∙while(T!=null && s->top!=0){
∙if(T!=null){
∙printf(T->data);
∙s->Maxsize[s->top]=T->data;
∙s->top++;
∙T=T->lchild;
∙}
∙else{
∙T=s->Maxsize[s->top];
∙s->top--;
∙if(T->lchild==null && T->rchild==null){ ∙w++;}
∙T=T->rchild;
∙}
∙}
∙}
∙
∙递归算法求叶子节点的个数
∙int leaf(BitTree T){
∙if(T==null)
∙return 0;
∙else if(T->lchild==null && T->rchild==null) ∙return 1;
∙else return leaf(T->lchild)+leaf(T->rchild); ∙}