二叉树中序遍历的非递归算法

论坛 期权论坛 期权     
1205568620   2018-4-26 14:00   3973   3
分享到 :
0 人收藏

3 个回复

倒序浏览
2#
有钱买不起房子  2级吧友 | 2018-4-30 01:55:14 发帖IP地址来自
#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;   //遍历右子树

}

}
3#
热心网友  15级至尊 | 2018-4-30 01:55:15 发帖IP地址来自
很简单啊 你就把这棵树看成是满二叉树就可以通过满二叉树的性质写出来了
4#
fgdabin  1级新秀 | 2018-4-30 01:55:16 发帖IP地址来自
推荐这篇文章,把二叉树的前序、中序和后续的递归和非递归算法都讲了。
http://www.cppblog.com/ngaut/archive/2006/01/01/2351.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP