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

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

 

思路:

  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;

 

}

 

 

 

 

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值