三九宝宝网宝宝教育教学论文

求二叉树高度非递归算法C语言

03月15日 编辑 39baobao.com

[c语言实现二叉树的先序中序后序的递归和非递归算法和层次遍历]#include// malloc()等 #include// 标准输入输出头文件,包括EOF(=^Z或F6),NULL等 #include// atoi(),exit() #include// 数学函数头文件,包括floor(),ceil(),abs()等#define Cle...+阅读

int BiTreeDepthHierarchy(BiThrTree T) //非递归类层次遍历求二叉树深度{ int depth=0,hp,tp,lc; //hp为已访问的结e799bee5baa6e997aee7ad94e58685e5aeb931333262363633点数,tp历史入队的结点总数,lc为每层最后一个结点标记 LinkQueue Q; BiThrNode *p; if(T) { p=T; hp=0;tp=1;lc=1; InitQueue(Q); EnQueue(Q,p); while(!QueueEmpty(Q)) { DeQueue(Q,p); hp++; //hp为已访问的结点数 if(p->lchild) { EnQueue(Q,p->lchild); tp++; //tp记录历史入队的结点总数 } if(p->rchild) { EnQueue(Q,p->rchild); tp++; } if(hp==lc) //当hp=lc时,表明本层结点均已访问完 { depth++; lc=tp; //lc=tp,更新下层的末结点标记 } } } return depth;}...

二叉树中序遍历非递归算法c语言实现

把递归拆开,自己弄个栈来模拟递归就是了貌似这种技巧没什么实际意义,不过还是写了吧#include#define MAXN 100 /*节点的最大数量,姑且定为100*/struct Node//二叉树节点{int data;Node *left,*right;};Node *root;void Load(Node **p);//读取以p为根节点的子树,具体怎么写与本问题无关,省略void Travel(Node *p)//非递归中序遍历以p为根节点的子树{Node *stack[MAXN];int flag[MAXN];//标记节点的遍历状态,0表示刚遍历到,1表示已经输出该节点,2表示已遍历左子树,3表示已遍历右子树int depth;stack[0]=p;flag[0]=0;depth=0;while (depth!=-1){if (flag[depth]==0){flag[depth]=1;printf("%d\n",stack[depth]->data);}else if (flag[depth]==1){flag[depth]=2;if (stack[depth]->left!=NULL){stack[depth+1]=stack[depth]->left;flag[depth+1]=0;depth++;}}else if (flag[depth]==2){flag[depth]=3;if (stack[depth]->right!=NULL){stack[depth+1]=stack[depth]->right;flag[depth+1]=0;depth++;}}else if (flag[depth]==3){stack[depth]=NULL;flag[depth]=-1;depth--;}}}main(){Load(&root);Travel(root);}...

二叉树的非递归算法。谁能帮忙讲解一下每一步是什么意思

代码分析如下:

void preordertraverse(BiTree t){ //非递归先序

SeqStack s;

s.top=-1; //置栈空

while((t)||(s.top!=-1)){ //当结点非空或栈非空时循环

while(t){ //结点非空时

printf("%c",t->data); //首先访问当前子树的根结点

s.top++;

s.data[s.top]=t; //此根结点入栈

t=t->lchild; //准备访问左子树

}

if(s.top>-1){ //若栈非空

t=s.data[s.top];

s.top--; //出栈一个结点

t=t->rchild; //准备访问它的右子树

}

}

}

void inordertraverse(BiTree t){ //非递归中序

SeqStack s;

s.top=-1;

while((t)||(s.top!=-1)){ //同上

while(t){

s.top++;

s.data[s.top]=t; //先根结点入栈

t=t->lchild; //准备访问左子树

}

if(s.top>-1){ //若栈非空

t=s.data[s.top];

s.top--; //出栈一个结点

printf("%c",t->data); //访问当前子树的根结点

t=t->rchild; //准备访问它的右子树

}

}

}

void lastordertraverse(BiTree t){ //非递归后序

SeqStack s;

s.top=-1;

while((t)||(s.top>-1)){

while(t){

s.top++;

s.data[s.top]=t; //先根结点入栈

s.tag[s.top]=0; //标记:左子树还未访问

t=t->lchild; //准备访问左子树

}

while((s.top>-1)&(s.tag[s.top]==1)){ //当栈非空且栈顶的左子树已访问

t=s.data[s.top]; //取栈顶元素

printf("%c",t->data); //访问当前子树的根结点

s.top--; //退栈

}

if(s.top>-1){ //若栈非空

t=s.data[s.top]; //取栈顶元素

s.tag[s.top]=1; //标记:左子树已访问

t=t->rchild; //准备访问右子树

}

else t=NULL; //若栈空则可退出

}

}

以下为关联文档:

C语言二叉树遍历程序先看下creat这个函数: status creat(bitnode *t)/*先序建立二叉树*/ { char ch; ch=getch();putch(ch); if(ch=='0') t=NULL; else { t=(bitnode *)malloc(sizeof(bitnode));...

C语言实现非递归全排列#include <stdio.h> void swap(int *p, int *q) /* 交换值 */ { int t; t = *p; *p = *q; *q = t; } void newseq(int *data,int start,int last) { while(start < last) {...

求C语言快排非递归算法解析。非递归//快排非递归算法void merge(int a[], int low, int center, int high){//这里的merge与教科书上有不同。我们用两个数组L[],R[]来存储a[]需要合并的两段 int i = 0; int j...

C语言课程设计 shell排序堆排序快速排序归并递归和非递归#include#include#include#includevoid shellSort(int *a,int len) { int step; int i,j; int temp; for(step=len/2; step>0;step/=2) { for(i=step;i=0 & temp0; i--) { h...

用c语言解决快速排序算法不用递归自己构造一个栈,模拟递归的过程 #define push2(A,B) push(B);push(A); void quicksort(a[],l,r) { int i; stackinit();push2(l,r); while(!stackempty()) { l=pop();r=pop()...

求二叉树遍历算法C语言实现的下面是c语言的前序遍历二叉树的算法,在这里假设的节点元素值假设的为字符型, 说明:算法中用到了结构体,也用到了递归的方法,你看看怎么样,祝你好运! #include"stdio.h" typedef char...

c语言基础知识的二叉树的遍历算法先序: Status(PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e)){ if(T){ if(Visit(T->data)) if(PreOrderTraverse(t->lchild,Visit)) if(PreOrderTraverse(T->rchil...

急急急:关于二叉树的算法遍历左右子树交换用类C语言要详细代码(1)编写建立二叉树的算法。 (2)验证二叉树的先序、中序、后序遍历算法 (3)编写二叉树的左右子树交换算法 上面这些都比较简单,程序如下: #include <stdio.h> #include <malloc...

精通c语言的亲们关于二叉树节点怎么计算呢首先,你要使用到二叉树的遍历。二叉树的遍历有中序遍历,前序遍历和后续遍历。不管你用的是哪一中遍历方式,只要你扫描的某个节点的左右孩子为空,那么该节点就是叶子节点,这时你的...

推荐阅读
图文推荐