二叉树搜索树转双链表

/*
1.把二元查找树转变成排序的双向链表
 题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
    
  10
  / \
 6 14
 / \ / \
4 8 12 16
    
 转换成双向链表
4=6=8=10=12=14=16
*/

#include <iostream>

struct btree_node
{
	int val;
	btree_node* left;
	btree_node* right;
	btree_node()
	{
		left=right=NULL;
		val=0;
	}
};

btree_node* head=NULL;
btree_node* index=NULL;

//采用中序遍历
void convert_to_dlist(btree_node* root)
{
	if(root==NULL)
		return ;
	if(root->left!=NULL)
		convert_to_dlist(root->left);
	//
	root->left=index;
	if(index!=NULL)
		index->right=root;
	else
		head=root;
	index=root;
	//
	if(root->right!=NULL)
		convert_to_dlist(root->right);
}

void add_val_to_btree(btree_node*& root,int val)
{
	if(root==NULL)
	{
		root=new btree_node();
		root->val=val;
		root->right=root->left=NULL;
	}
	else
	{
		if(val<=root->val)
			add_val_to_btree(root->left,val);
		else
			add_val_to_btree(root->right,val);
	}
}

int main(int argc,char* argv[])
{
	btree_node* root=NULL;
	add_val_to_btree(root,10);
	add_val_to_btree(root,6);
	add_val_to_btree(root,14);
	add_val_to_btree(root,4);
	add_val_to_btree(root,8);
	add_val_to_btree(root,12);
	add_val_to_btree(root,16);
	convert_to_dlist(root);
	while(NULL!=head)
	{
		std::cout<<head->val<<" ";
		head=head->right;
	}
	std::cout<<std::endl;
	system("PAUSE");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值