1.把二元查找树转变成排序的双向链表

来源:互联网 发布:英文介绍淘宝网 编辑:程序博客网 时间:2024/05/01 12:39

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。

 

思路:

  1. 创建一个节点指针last,指向空;
  2. 中序遍历整个树,当访问到每个节点时,将当前节点放入last指向的链表的末尾,并调整链表及当前节点的左右指针。

 

代码:

 

struct  TNode

{

int  data;

struct  TNode  *left;

struct  TNode  *right;

}TNode;

 

void  covert ( TNode  *troot , TNode  *last )

{

if( troot==NULL )//跳出递归

return;


if( troot->left!=NULL )//遍历左子树

covert( troot->left , last );

 


//将当前节点插入到链表的最后

troot->left = last;

if(last!=NULL)

last->right = troot;

last = troot;

 

if( troot->right!=NULL )//遍历右子树

covert( troot->right , last )

 

}

 

TNode*  app( TNode *head )

{

TNode  *last = NULL;

covert( head , last );

return  last;

 

}

 

 

 

 

 

 

 


原创粉丝点击