关于二叉树的非递归遍历的算法疑惑

原创 2014年07月20日 16:32:24

        二叉树的遍历让递归算法的思想得到了无限的魅力施展,可以说二叉树的操作由于递归而变得简单和易于操作,只要搞清楚递归的本质和代码原理即可

但是要想脱离递归而遍历二叉树的所有元素,真的有点困难。

网上最多的一个算法是应用栈的入栈和出栈。

       我看了一些帖子,有点看不懂,自己尝试用流程框架来打印出所有元素,但都失败了,要么只能打印特定的二叉树,要么是重复打印,所以在想是不是除了栈,没有其他的方法了

附上我的代码:

期待高手指点迷津:

//中序遍历--左中右打印
int print_middle(pnode_t proot)
{
if(proot == NULL)
{
printf("print wrong\n");
return;
}
pnode_t father = NULL;
pnode_t tmp = NULL;
tmp = father;
while(proot != NULL)
{
//printf("here2\n");
father = proot;
if((father->data == 9)&&( father->left == NULL)&&(father->right == NULL))
{
break;
}
while(father != NULL)
{
//printf("here2\n");
//printf("data=%d\n",proot->data);
//break;
//father = proot;
while( father != NULL )
{
tmp = father;
father = father->left;
}
father = tmp;
printf("%d ",father->data);
if(father->right != NULL)
{
father = father->right;
}
tmp = father;
//printf("%d\n",father->data);
//break;
//printf("here\n");
if((father->left == NULL)&&(father->right == NULL))
{
//printf("here2\n");
pnode_t new = NULL;
new = find_lr_node(proot,father->data);
//printf("new=%d\n",new->data);
//printf("father=%d\n",father->data);
if(new->left != NULL)
{
if(new->left->data == father->data)
{

printf("%d ",new->data);
   new->left = NULL;
father = NULL;

pnode_t p = NULL;
p = find_lr_node(proot,new->data);
//printf("p=%d\n",p->data);
if(p->left != NULL)
{
if(p->left->data == new->data)
p->left = NULL;
new = NULL;
}
else if(p->right != NULL)
{
//printf("here3\n");
if(p->right->data == new->data)
//free(p->right);
p->right = NULL;
new = NULL;
}
//free(p->right);
//printf("p=%d\n",p->data);
//break;
}
}

else if(new->right != NULL)


{
if(new->right->data == father->data)
{
printf("%d ",new->data);
new->right = NULL;
father = NULL;
pnode_t pp = NULL;
pp = find_lr_node(proot,new->data);
if(pp->left != NULL)
{
if(pp->left->data == new->data)
pp->left = NULL;
   new = NULL;
}
if(pp->right != NULL)
{
if(pp->right->data == new->data)
pp->right = NULL;
new = NULL;
}
}
}
//printf("here5\n");
//printf("here\n");
//break;

}
//printf("here6\n");

}
}
    printf("\n");

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

二叉树的非递归遍历

  • 2014年11月04日 12:39
  • 3KB
  • 下载

二叉树的非递归遍历

  • 2012年10月20日 18:08
  • 344KB
  • 下载

二叉树的前中后序非递归遍历算法实现

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。...

二叉树非递归遍历

  • 2013年03月09日 13:50
  • 38KB
  • 下载

二叉树非递归遍历

  • 2013年01月13日 16:21
  • 3KB
  • 下载

数据结构六:二叉树的先序建树与中序的非递归遍历算法

熟悉二叉树的遍历建树过程有利于对后文线索化二叉树的学习          对于数据结构中二叉树特殊的结构,经过一段时间的温习发现自己基础并不是很牢靠,所以写下这篇博文也是记录一下自己的学习过程,给日...
  • szqsdq
  • szqsdq
  • 2015年08月20日 14:40
  • 689

二叉树的非递归遍历 C++

  • 2011年12月08日 20:42
  • 4KB
  • 下载

二叉树非递归遍历C

  • 2013年09月18日 15:14
  • 4KB
  • 下载

【算法导论】二叉树的前中后序非递归遍历实现

二叉树的非递归遍历

二叉树非递归遍历 课设

  • 2010年01月04日 21:39
  • 267KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于二叉树的非递归遍历的算法疑惑
举报原因:
原因补充:

(最多只允许输入30个字)