#define MAXNODE 100 //二叉树最大节点数 //定义二叉树链式结构 typedef struct BitNode { char data; //数据域 struct BitNode *lchild,*rchild;//左右指针域 }BitNode,*BiTree; //二叉树进行中序非递归遍历 void NRInorder(BiTree t) { BiTree s; //s-指向当前节点 BiTree stack[MAXNODE]; //定义栈 int top=-1; //初始化栈顶指针 if(t==NULL) return; stack[++top]=t;//根指针入栈 s=t->lchild; //s指向左子树 while(s!=NULL||top!=-1)//当存在节点(涉及到根下右子树)或者栈不为空,进行遍历 { while(s!=NULL) //如果存在节点,寻找最左子树并入栈 { if(top>=MAXNODE-1) { printf("栈为满\n"); return; } stack[++top]=s;//当前节点入栈 s=s->lchild; //左子树进行遍历 } if(top==-1) { printf("栈为空\n"); return; } s=stack[top--]; //弹出栈顶元素到s中 printf("%c ",s->data); //输出当前节点元素值 s=s->rchild; //遍历右子树 } }
二叉树中序遍历的非递归算法
最新推荐文章于 2025-05-21 16:16:26 发布