博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每天一道算法题(8)——把二元查找树转变成排序的双向链表
阅读量:6895 次
发布时间:2019-06-27

本文共 1084 字,大约阅读时间需要 3 分钟。

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

10
/ \
6 14
/ \ / \
  4 81216
      转换成双向链表4=6=8=10=12=14=16

1.思路

       使用递归法。注意由于需要改变指针的指向,因此使用了指针引用。

2.代码

#include"iostream"using namespace std;struct Node // a node in the binary search tree{  int value; // value of node  Node* left; // left child of node  Node* right; // right child of node};bool createList(Node* Head,Node* &left,Node* &right){      	  left=Head;	  right=Head;	        if(!Head)	        return false;	  else{	   Node*l1,*r1,*l2,*r2;	   l1=NULL;	   r1=NULL;	   l2=NULL;	   r2=NULL;	   if(createList(Head->left,l1,r1)){		   	Head->left=r1;			r1->right=Head;			left=l1;	   }	   if(createList(Head->right,l2,r2)){		   	Head->right=l2;			l2->left=Head;			right=r2;	   }	  return true;	}}void main(){	Node n4={4,NULL,NULL};	Node n5={8,NULL,NULL};	Node n6={18,NULL,NULL};	Node n2={6,&n4,&n5};	Node n3={14,NULL,&n6};	Node n1={10,&n2,&n3};	Node*Left=NULL;	Node*Right=NULL;	createList(&n1,Left,Right);	while(Left){		cout<
value<
right; }}

转载于:https://www.cnblogs.com/engineerLF/p/5393043.html

你可能感兴趣的文章
JavaScript中的setTimeout函数
查看>>
ln软链接出现Too many levels of symbolic links
查看>>
Java中排序相关
查看>>
关于Plan的计划
查看>>
提升tomcat服务器性能的七条经验
查看>>
Tomcat 生产服务器性能优化
查看>>
ubuntu下Odoo10开发环境配置
查看>>
Java ServletContext 详解
查看>>
html <area> 的用法,图片热点的使用
查看>>
CheckBox的CheckedChanged事件获取DataGrid选中行的值
查看>>
linux exec 文件重定向
查看>>
jquery mobile——必须引入的文件及头信息
查看>>
Redis安装部署
查看>>
redis-sentinel 做HA
查看>>
图为先C++笔试20131017
查看>>
模仿墨迹天气-demo
查看>>
mysql基于日志点的复制步骤
查看>>
查看centos中的用户和用户组
查看>>
Elixir ABC 1
查看>>
ZeroSpeech
查看>>