社区
数据结构与算法
帖子详情
大家讨论一下后序遍历二叉树的非递归算法好吗?想了很久都想不出来,帮帮忙吧.....
csdn_lxb
2002-08-03 06:02:29
同标题
...全文
35
5
打赏
收藏
大家讨论一下后序遍历二叉树的非递归算法好吗?想了很久都想不出来,帮帮忙吧.....
同标题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hyeena
2002-08-25
打赏
举报
回复
看来我的50分的问题是白问了!
wangmin_yjitx
2002-08-04
打赏
举报
回复
要用到栈,每个结点要两次入栈,可设标志位,第二次出栈就可访问。
jet8
2002-08-03
打赏
举报
回复
后序遍历过程中,对于某节点x,从x的左孩子返回后,应将x出栈。但此时还不能访问x,所以x还需要再次入栈。当从x的右孩子返回时,x将再次出栈。这样,遍历过程就面对一个问题:当x出栈后,判断是从左孩子返回的还是从右孩子返回的?解决的方法是在x入栈的时候同时将一个标志入栈。x第一次入栈时,将标志0同时入栈;x第二次入栈时,将标志1同时入栈;x出栈时,若标志是0,则表示从左孩子返回;若标志为1,则表示从右孩子返回。下面的算法没有上机测试,供你参考。
typedef struct _btree{//二叉树的节点结构
char data; //数据域
struct _btree *lchild; //左孩子指针
struct _btree *rchild; //右孩子指针
}btree;
typedef struct _stk{//栈节点结构
int flag; //标志域
btree *bt; //二叉树节点指针
}stk;
void postorder(btree *rt)
{
btree *p;
int flag;
initstk();//将栈清空
p=rt;
while (p||!empty()){//empty()函数用于栈判空
if (p) {
push(p,0);//将当前指针和标志0入栈
p=p->lchild;
}
else{
pop(&p,&flag);//取得栈顶指针和标志
if (!flag) {
push(p,1);
p=p->rchild;
}
else {
visit(p);//访问p所指向的节点
p=NULL;
}
}
return;
}
lovetsinghua
2002-08-03
打赏
举报
回复
后序的递归:postorder(node *current){ //0
if(current != NULL){
postorder(current->left); //1
postorder(current->right); //2
..........
action(current);
..........
}
我想你要问的问题,应该是用栈吧?如果,不用栈的话,可以去线索化去实现,那样就很简单,线索化的主要原理是用原有的空指针来存放结点的前驱和后继指针。
如果用栈,嘿嘿,有点烦的地方是,如果是每访问一个新的结点都要压栈的话,那一次操作对于一个结点会压栈3次。(你可以看到上面的0,1,2)晕。。。那么action(current)在那一次的时候执行呢?其实,除了第一点(head),别的结点,可以做一个计数变量。
第一次退栈:i++;重新压栈;并把它的LEFT也压栈。
第二次退栈:i++;重新压栈;将其RIGHT压栈。
第三次退栈:i++;(i==3)将该结点标为将要访问的结点。
不然,你可以另做一个栈,用来代替i.
gonglei007
2002-08-03
打赏
举报
回复
Status InOrderTraverse(BiTree T,Status (*Visit)(TElemType e))
{
InitStack(S);Push(S,T);
while(!StackEmpty(S))
{
Push(S,p->lchild);
}
Pop(S,p);
if(!StackEmpty(S))
{
Pop(S,p);
if(!Visit(p->data))return ERROR;
Push(S,p->rchild);
}
return OK;
}
算法
入门教程——
二叉树
循序渐进的讲解
二叉树
的相关知识。其中包括二叉搜索树的插入、删除与查询、
二叉树
的遍历、求一颗
二叉树
的高度等重要且经典的知识。
#
二叉树
和线索
二叉树
相关问题v1
对于线索
二叉树
,树中的2度结点是没有线索的(因为度为2的结点的指针域全被他的左右孩子占用了)线索
二叉树
利用空指针域配合标记位,可以加速查找节点的前驱/后继。线索
二叉树
分为三种(他们分别对应于险种
二叉树
的顺序遍历)后根遍历(
后序遍历
):postOrder。先根遍历(先序遍历):preOrder。设根节点为N,左子树为L;中根遍历(中序遍历):InOrder。
二叉树
是一种逻辑结构(非线性结构)下面两种情况都会触发一次空调用。线索
二叉树
是一种物理结构。
蓝桥杯试题
算法
训练 绘制地图
蓝桥杯试题
算法
训练 绘制地图 问题描述 最近,WYF正准备参观他的点卡工厂。WYF集团的经理氰垃圾需要帮助WYF设计参“观”路线。现在,氰垃圾知道一下几件事情: 1.WYF的点卡工厂构成一颗
二叉树
。 2.一共有n座工厂。 3.他需要把这颗树上的点以
后序遍历
的方法列出来,才能绘制地图。 还好,最近他的属下给了他先序遍历和中序遍历的数据。可是,氰垃圾最近还要帮㊎澤穻解决一些问题,没有时间。请你帮帮他,替他完成这项任务。由于氰垃圾的一些特殊的要求,WYF的参观路线将会是这棵树的
后序遍历
。 输入
【北邮OJ】100.
二叉树
的层数
【北邮OJ】100.
二叉树
的层数题目描述输入格式输出格式输入样例输出样例 题目描述 老师有一个问题
想
考考mabo,但是mabo不会,所以
想
请你来
帮帮忙
。 问题如下: 给一个
二叉树
,请把这个棵
二叉树
按层来打印。如果为相同层,需要从左到右打印。一个节点是先添加左节点后添加右节点,即添加顺序与输入顺序一致。 输入格式 首先输入一个整数T,表示一共有T组数据 0<T<=10 再输入两个整数N...
完全
二叉树
的层序遍历游戏
聊以自娱的玩意,各位
想
看就看看吧。越写越垃圾。
数据结构与算法
33,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章