非递归和递归算法计算二叉树节点

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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); ∙}

相关文档
最新文档