Chinaunix首页 | 论坛 | 博客
  • 博客访问: 584762
  • 博文数量: 61
  • 博客积分: 4112
  • 博客等级: 上校
  • 技术积分: 749
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-27 16:20
文章分类

全部博文(61)

文章存档

2016年(1)

2013年(1)

2012年(2)

2010年(1)

2008年(2)

2007年(25)

2006年(29)

分类:

2007-01-18 01:32:15

遍历中序线索二叉树

FUNC in_next(p,thrt:thlinktp):thlinktp;
{在以thrt为头指针的中序线索二叉树上,查找指针p所指结点的后继}
    s:=*p.rchild;{当rtag=1,s指向后继,如果rtag=0则指向右孩子}
    IF *s.rtag=0 THEN{如果rtag=0,有右孩子,则进入循环,否则表明找到p的后继s}
        WHILE *s.ltag=0 DO
            s:=*s.lchild;
    RETURN(s);
ENDF{in_next}
 
PROC thrt_inorder(thrt:thlinktp);
{遍历以thrt为头指针的中序线索二叉树}
    p:=*thrt.lchild;{据线索二叉树的性质,p指向了根节点}
    WHILE *p.ltag=0 DO{定位,到要中序遍历的第一个结点}
        p:=*p.lchild;
    WHILE p<>thrt DO{开始遍历,调用in_next函数来找后继}
    [visit (*p.data); p:=in_next(p, thrt);]
ENDP;{thrt_inorder}
 
 

遍历后序线索二叉树

FUNC post_next(p,thrt:thlinktp):thlinktp;
{在以thrt为头指针的后序线索二叉树上,查找指针p所指结点的后继}
    s=PARENT(p,thrt);{查找p在thrt中的双亲}
    IF s=thrt THEN RETURN (thrt);{如果p是根,则返回头结点}
    IF *s.rchild=p OR *s.rtag=1 THEN {如果p为右孩子或独生左孩子,后继为双亲}
        RETURN (s);
    {如果双亲有两个孩子,且p为s的左孩子}
    WHILE *s.rtag=0 DO{如果有右孩子则进入循环,否则返回}
    [
        s:=*s.rchild;
        WHILE *s.ltag=0 DO s:=*s.lchild;{如果有左孩子,则进入循环}
    ]
    RETURN (s);
ENDF;{post_next}
 
PROC thrt_postorder (thrt:thlinktp);
{遍历以thrt为开头的后续线索二叉树}
    IF thrt<>*thrt.lchild THEN{如果不是空二叉树}
    [
        p:=*thrt.lchild;{p指向根}
        search:=true;
        {找到要遍历的第一个结点}
        WHILE search DO
        [
            WHILE *p.ltag=0 DO p:=*p.lchild;
            IF *p.rtag=0 THEN p:=*p.rchild;
                ELSE search:=false;
        ]
        WHiLE p<>thrt DO
        [visit(*p.data);p:=post_next(p,thrt)]
    ]
ENDP;{thrt_postorder}
 
 

先序遍历线索二叉树

FUNC pre_next(p,thrt:thlinktp):thlinktp;
{在以thrt为头指针的先序线索二叉树上,查找指针p所指结点的后继}
    IF *p.ltag=0 THEN RETURN (*p.lchild);{如果有左孩子,则左孩子为后继}
        ELSE RETURN (*p.rchild);
ENDF;{pre_next}
 
PROC thrt_preorder (thrt:thlinktp);
{遍历以thrt为头指针的先序线索二叉树}
    p:=*thrt.lchild;
    WHILE p<>thrt DO
    [
        visit(*p.data);
        p=pre_next(p,thrt);
    ]
ENDP;{thrt_preorder}
 
阅读(2396) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-06-03 03:17:42

lal