线索二叉树相关问题

线索二叉树相关问题

1.在先序线索二叉树中求解指针P的后继结点

binode presuc(Binode *p){
    if(p->rtag==1)
        return p->rchild;
    else if(p->ltag==0)
        return p->lchild;
    else 
        return p->rchild;
}

2.在中序线索二叉树钟求解指针P的后继结点

binode insuc(Binode *p){
    binode *q=p->rchild;
	if(p->rtag==1)
        return p->rchild;
    else{
        while(q->ltag==0)
            q=q->lchild;
        return q;
    }
}

3.中序线索二叉树中求解指针p的前驱结点

binode insuc(Binode *p){
    binode *q=p->lchild;
    if(p->ltag==1)
        return p->lchild;
    else{
        while(q->rtag==0)
            q=q->rchild;
        return q;
    }
}

4.后序线索二叉树中求解指针P的前驱结点

binode postsuc(Binode *p){
    if(p->ltag==1)
        return p->lchild;
    else if(p->rtag==0)
        return p->rchild;
    else 
        return p->lchild;
}

5.按先序次序遍历先序线索二叉树的非递归算法

void preorder(Binode *T){
    binode *p=T;
    while(p!=NULL){
        cout<<p->data;
        if(p->rtag==1)
            p=p->rchild;
        else if(p->ltag==0)
            p=p->lchild;
        else 
            p=p->rchild;
    }
}

6按中序遍历先序线索二叉树的非递归算法

void inorder(Binode *T){
    binode *p=T;
    //找到首结点
    while(p->ltag==0)
        p=p->lchild;
    //从首结点开始遍历
    while(p!=NULL){
        visite(p);
        //找后继
        p=insuc(p);
    }
}
posted @ 2021-10-28 21:25  CNPolaris  阅读(30)  评论(0编辑  收藏  举报