将二叉查找树转换为有序双链表

#include<iostream>
#include<stdlib.h>

using namespace std;
/*
将二叉查找树如下: 转换为排序双向链表
			10
		  /    \
		 6     14
		/ \    / \
       4   8  12 16
转换后的双向链表为4=6=8=10=12=14=16
转换的思想如下:
将二叉查找树种指向左子节点的指针调整为指向前一个结点的指针,
			指向右子节点的指针调整为指向下一个结点的指针
这样可以得到     4<-6->8  6<-10->14 12<-14->16
要得到双向链表的有序序列,我们中序遍历二叉查找树就能得到有序的序列
下面讨论如何调整指针,得到这个有序的双向链表
我们可以再根节点将二叉树看作3部分:根节点,左子数,右子数
当我们将10的left指向8,将8的right指向10
由于我们采用的是中序遍历,当遍历到节点10的时候,节点10的左子树已经转换为一个有序
的双向链表,而节点8已经转换为这个有序双向链表的尾结点
所以在这里用一个last_node来保存最后一个节点的指针,用于链接根节点,将这个last_node
指向根节点,对于节点10的右子树,采用类似的操作
*/
struct BSnode
{
	int data;
	BSnode *left,*right;
};
//定义所需要的数据类型
typedef BSnode *BStree;
typedef BSnode *DList;
typedef BSnode DLnode;

//插入操作
BStree InsertNode(BStree tree,int data);
//转换操作
DList BStreeToDlist(BStree tree);
//调整BStree的指针
void CovertNode(BSt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值