二叉排序树与双向链表的转换
2016-07-23 11:34
260 查看
前几天见到过这个题,觉得打破了自己老套的思路,所以记录了下来。
题目是:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整结点指针的指向。如图所示
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
今天又看到了这道题吗,可惜前几天看的都忘了,不过这次可以想到其实这道题目是中序遍历的变形。
在中序遍历的时候,将输出 改为成 链表结点的连接。
创建输的代码就省略了,直接上二叉树转换成链表的代码。
看看下面的代码的大体框架本身就是中序遍历,只是将中序遍历中的输出换成了链表节点的转换
通过这次做题,再次说明了熟能生巧的道理
代码路漫漫,何时是尽头,想要财务自由,小白仍需加油
题目是:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整结点指针的指向。如图所示
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); }
通过这次做题,再次说明了熟能生巧的道理
代码路漫漫,何时是尽头,想要财务自由,小白仍需加油
相关文章推荐
- 2016 Multi-university-training-contests-2 1006 点双连通分量
- java绘图技术
- Java 8 数据流教程
- Git命令:将当前目录文件移动到上级目录
- 常见问题
- Ubuntu下deb包的安装方法
- live writer 500,501解决方案
- 正则表达式看过来
- substr — 详解
- iostat详解
- Codeforces Round #364 div.2 C. They Are Everywhere 【尺追法】
- HTTP 协议 学习笔记一
- Ionic幻灯片
- HTTP 协议 学习笔记一
- HDU 5067 动态规划---旅行商(tsp)问题
- Hibernate体系结构
- 机器学习实战学习笔记2——决策树算法
- [原创]Clang with Microsoft CodeGen小测试
- ios翻转
- 225. Implement Stack using Queues