Exemplo n.º 1
0
 /*中序遍历过程中进行中序线索化
  */
void InThread(BiThrTree p)
{
   
    if(p)
    {
        InThread(p->lchild);
        if(!p->lchild)
        {
            p->ltag = 1;
            p->lchild = pre;   /*pre 是一个全局指针,始终指向一个刚刚访问过的节点,便于指向
                                 一开始就是一个虚构的头节点,游离于原来的树之外的*/
        }
        else
        {
            p->ltag = 0;
        }
        if(!pre->rchild)
        {
            pre->rtag = 1;
            pre->rchild = p;
        }
        else
        {
            pre->rtag = 0;
        }
        pre = p;
        InThread(p->rchild);
    }
}
Exemplo n.º 2
0
/*
 *中序遍历建立二叉索引树
 */
BiThrTree 
InOrderThr(BiThrTree p)
{
    BiThrTree root = (BiThrTree)malloc(sizeof(BiThrNode));
    root->ltag = 0;             /*建立虚拟根节点*/
    root->rtag = 1;
    root->lchild = p;
    root->rchild = root;
    if(!p)
    {
        root->lchild = root;
    }
    else
    {
        pre = root;
        InThread(p);           /*线索化*/
        pre->rchild = root;   /*最后访问的那个节点的后继节点为虚拟的根节点*/
        pre->rtag = 1;
        root->rchild = pre;   /*虚拟根节点的后继节点为最后访问的那个节点*/
    }
    return root;            /*不要误以为root是局部指针变量不可在函数中返回
                              在这里它保存的是堆空间首地址,所以可以直接返回传递给上一级的变量保存
                            */
}
Exemplo n.º 3
0
bool Skein::InCurrentThread(Node* node)
{
  return InThread(node,m_inst.current);
}