免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1784 | 回复: 4
打印 上一主题 下一主题

二叉树遍历的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-31 21:56 |只看该作者 |倒序浏览
二叉树的后序遍历   不过不能用递归  也不能用栈

论坛徽章:
0
2 [报告]
发表于 2007-10-31 21:59 |只看该作者
引入指向父节点的指针

论坛徽章:
0
3 [报告]
发表于 2007-10-31 22:12 |只看该作者
Typedef struct
{
   b_Tree    *parent;
   b_Tree    *left;
   b_Tree     *right;

}*BTree,BTree;

给定了一个头结点来遍历

论坛徽章:
0
4 [报告]
发表于 2007-10-31 22:14 |只看该作者
原帖由 billzhou 于 2007-10-31 22:12 发表
Typedef struct
{
   b_Tree    *parent;
   b_Tree    *left;
   b_Tree     *right;

}*BTree,b_Tree;

给定了一个头结点来遍历





Typedef struct
{
   b_Tree    *parent;
   b_Tree    *left;
   b_Tree     *right;

}*BTree,b_Tree;

论坛徽章:
0
5 [报告]
发表于 2007-11-01 08:30 |只看该作者
自己验证一下看对不对,粗略测了一下。基本思想就是这样的,需要做访问标记,加入父指针是为了方便回退。
void postorder_bbtree(bbtree_node *btn)
{
    bbtree_node *p;
    bbtree_node *q = btn;

    for (;;)
    {
        p = q;
        p->times++;
        if (p->times == 3) //第三次访问,可以打印了
        {
            
            print_bbtreeNode(p);

            p->times = 0;  //用完了归零,方便下次遍历哈
            if ((q = p->father) != NULL)
                continue;
            else   //根节点没有老爸,遍历完毕
                return;
        }

        if (p->times == 1) //第一次访问,看看有没有左节点
        {
            if (p->left != NULL)
                q = p->left;
        }
        else   //第二次访问,看看有没有右节点
        {
            if (p->right != NULL)
                q = p->right;
        }

    }
}



[ 本帖最后由 anthony1983 于 2007-11-1 08:58 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP