您的位置:首页 > 其它

中序线索二叉树算法 解决 把二元查找树转变成排序的双向链表

2012-04-04 10:26 363 查看
1.中序线索二叉树算法,源自本科教材《数据结构》

typedef struct ThreadTNode
{
  elemtype data;

  struct ThreadTNode *lchild, *rchild;

  int ltag, rchild;

}ThreadTNode, *ThreadTree

void CreateInThread ( ThreadTree T )
{
  ThreadTree pre = NULL;
   if( T != NULl )
   {
    InThread( T, pre );
     pre->rchild = NULL;
    pre->rtag = 1;
  }
}

void InThread ( ThreadTree p, ThreadTree pre )
{
   if( p )
  {
    InThread ( p->lchild, pre );//说pre是前驱标记是正确的,说它是后继标记也是正确的,

    if( p->lchild == NULL )
     {
      p->lchild = pre;
      p->ltag = 1;
    }
     if( pre && pre->rchild == NULL )
     {
       pre->rchild = p;
       pre->rtag = 1;
    }

     pre = p;

    InThread( p->rchild, pre );
  }
}


2.把二元查找树转变成排序的双向链表,源自微软的笔试题

typedef struct BSTNode
{
  elemtype data;

  struct BSTNode *lchild, *rchild;

}BSTNode, *BSTree

void Convert( BSTree T )
{
   if( T )
   {
     BSTree tail = NULL; //把前驱后继指针标记看做链表的尾结点指针很恰当,所以命名为tail

    ConvertBST( tail, T ); // 把T转换成链表后连接到tail上,tail为链表当前尾结点指针

    tail->rchild = NULL;
   }
}

void ConvertBST( BSTree tail, BSTree p )
{
  if( p )
  {
     ConvertBST( tail, p->lchild );

     p->lchild = tail;

      if( tail )
      tail->rchild = p;

    tail = p;

    ConvertBST( tail, p->rchild );
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐