您的位置:首页 > 其它

二叉排序树与双向链表的转换

2016-07-23 11:34 260 查看
前几天见到过这个题,觉得打破了自己老套的思路,所以记录了下来。

题目是:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整结点指针的指向。如图所示

10

/ \

6 14

/ \ / \

4 8 12 16

转换成双向链表

4=6=8=10=12=14=16。

今天又看到了这道题吗,可惜前几天看的都忘了,不过这次可以想到其实这道题目是中序遍历的变形。

在中序遍历的时候,将输出 改为成 链表结点的连接。

创建输的代码就省略了,直接上二叉树转换成链表的代码。

BiTree Convert(BiTree &T)
{
if(!T)return NULL;
BiNode *List=NULL;
BiTreeConvertToList(T,&List);
//将头结点只在链表的最前面
while(List&&List->lchild)
List=List->lchild;
return List;
}


看看下面的代码的大体框架本身就是中序遍历,只是将中序遍历中的输出换成了链表节点的转换

void BiTreeConvertToList(BiTree &T,BiNode** List)
{
if(!T) return;
if(T->lchild)
BiTreeConvertToList(T->lchild,List);
T->lchild=*List;
if(*List) (*List)->rchild=T;
(*List)=T;
if(T->rchild)
BiTreeConvertToList(T->rchild,List);

}


通过这次做题,再次说明了熟能生巧的道理

代码路漫漫,何时是尽头,想要财务自由,小白仍需加油
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: