二叉树的非递归中序遍历
来源:互联网 发布:js随机生成字母和数字 编辑:程序博客网 时间:2024/05/18 20:36
最近在温习数据结构,通常网上看到的二叉树非递归中序遍历如以下形式(http://zhidao.baidu.com/question/287444419.html):
#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;//遍历右子树}}
考虑33~37行的判断,应该是不必要的。
进入此while循环的条件是
s!=NULL||top!=-1
如果s != NULL,那么stack中至少有一个节点使得top >= 0
如果s == NULL然而 top != -1,那么这里栈非空的条件自然满足。
因此33~37行的判断是多余的,可以省略。
个人观点,欢迎讨论。
- 二叉树的中序递归,非递归遍历
- 二叉树非递归后序遍历(非递归遍历中最麻烦的一个)
- 【二叉树遍历】中序------非递归
- 非递归中序遍历二叉树
- 中序遍历二叉树 [非递归]
- 非递归中序遍历二叉树
- 非递归中序遍历二叉树
- 二叉树的中序遍历的非递归算法
- 非递归的二叉搜索树的中序遍历
- 前,中,后序遍历二叉树 (递归 && 非递归的栈 && 非递归非栈的线索二叉树)
- 中序遍历二叉树的非递归算法
- 二叉树的遍历(中序,非递归)
- 二叉树的中序遍历(非递归)
- 中序遍历二叉树的非递归形式
- 二叉树的非递归中序遍历
- 二叉树的中序遍历非递归
- 二叉树的中序遍历(非递归算法)
- 二叉树前后中序遍历的非递归实现
- 用dropdownlist控制gridview某个单元格的显示与否
- ASP.NET 页面间传递参数的方法
- Sql sever中的CASE语句
- Page.IsPostBack属性
- 正则表达式
- 二叉树的非递归中序遍历
- sql sever经典语句
- select case语句
- sql sever中的set nocount选项
- sql sever中如何将一列修改为自增长列
- 提高.NET网站性能
- 详解ASP.net中的session
- 将gridview导出为Excel
- Asp.net中页面间传递参数方法总结