0052 二叉搜索树线索化为双向链表
来源:互联网 发布:apache启动不了的原因 编辑:程序博客网 时间:2024/06/14 01:33
将一棵二叉搜索树(又叫查找树)转化成一个排序的双向链表,我们也叫它为线索化。
思路:
二叉树中,每个节点都有两个指向子节点的指针。在双向链表中,每个节点也有两个指针,一个指向前,一个指向后。因此这两种结构有相似之处。在二叉树查找中,左节点的值小于父节点的值,右节点的值大于父节点的值,因此考虑:原先指向左子节点的指针调整为链表指向前一个节点的指针,原先指向右子节点的指针调整为链表中指向后一个节点指针。
假设二叉树的定义为:
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pLeft;};
递归的方法线索化代码:
BinaryTreeNode* Convert(BinaryTreeNode* pRootOfTree){ //pLastNodeInList 指向双向链表的尾节点,我们要返回头结点 BinaryTreeNode* pLastNodeInList = NULL; ConvertNode(pRootOfTree,&pLastNodeInList);//这个函数后面实现 BinaryTreeNode* pHeadOfList = pLastInList; while(pHeadOfList != NULL && pHeadOfList->m_pLeft != NULL) pHeadOfList = pHeadOfList->m_pLeft; return pHeadOfList; //这里定义ConvertNode()函数 void ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode** pLastNodeInList) { if(pNode ==NULL) return ; BinaryTreeNode* pCurrent = pNode; if(pCurrent->m_pLeft != NULL) ConvertNode(pCurrent->m_pLeft,pLastNodeInList); pCurrent->m_pLeft = *pLastNodeInList; if(*pLastNodeInList != NULL) (*pLastNodeInList)->m_pLeft = pCurrent; *pLastNodeInList = pCurrent; if(pCurrent->m_pRight != NULL) ConvertNode(pCurrent->m_pRight,pLastNodeInList); }}
本文来自《剑指offer》.面试题27,仅供参考学习。
1 0
- 0052 二叉搜索树线索化为双向链表
- 树——二叉搜索树化为双向链表
- 线索二叉树:二叉搜索树转换为双向链表
- 将二叉搜索树转换成一个排序的双向链表--中序线索化的变型。
- 二叉搜索树与双向链表
- 二叉搜索树转为双向链表
- 二叉搜索树和双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 二叉搜索树与双向链表
- 在线实时大数据平台Storm本地模式运行的一个小发现
- 表单form中<button>提交表单
- spring+mybatis 数据源读取不到配置文件的值
- AngularJS所有版本下载
- C++---函数内联
- 0052 二叉搜索树线索化为双向链表
- Hadoop基础知识---之YARN原理简述
- 报错:failed to get the task for process XXX(解决方案)
- 欢迎使用CSDN-markdown编辑器
- 数据仓库数据分层
- 在网页中使用js简单的实现弹出菜单,请高手飘过
- Spark Streaming 订单关联案例剖析
- iOS导航栏和底部tabbar的隐藏和背景色
- Scala资料