笔试面试之将2叉查找树转换为双向链表
来源:互联网 发布:软件需求可行性分析 编辑:程序博客网 时间:2024/06/06 13:09
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。
比如将二元查找树
10
/ /
6 14
/ / / /
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
分析:本题是微软的面试题。很多与树相关的题目都是用递归的思路来解决,本题也不例外。下面我们用两种不同的递归思路来分析。
思路一:当我们到达某一结点准备调整以该结点为根结点的子树时,先调整其左子树将左子树转换成一个排好序的左子链表,再调整其右子树转换右子链表。最近链接左子链表的最右结点(左子树的最大结点)、当前结点和右子链表的最左结点(右子树的最小结点)。从树的根结点开始递归调整所有结点。
BSTreeNode* Convert(BSTreeNode* pHeadOfTree) 转载自:http://zhedahht.blog.163.com/blog/static/254111742007127104759245/
{
// As we want to return the head of the sorted double-linked list,
// we set the second parameter to be true
return ConvertNode(pHeadOfTree, true);
}
void ConvertNode(BSTreeNode* pNode, BSTreeNode*& pLastNodeInList)
{
if(pNode == NULL)
return;
BSTreeNode *pCurrent = pNode;
// Convert the left sub-tree
if (pCurrent->m_pLeft != NULL)
ConvertNode(pCurrent->m_pLeft, pLastNodeInList);
// Put the current node into the double-linked list
pCurrent->m_pLeft = pLastNodeInList;
if(pLastNodeInList != NULL)
pLastNodeInList->m_pRight = pCurrent;
pLastNodeInList = pCurrent;
// Convert the right sub-tree
if (pCurrent->m_pRight != NULL)
ConvertNode(pCurrent->m_pRight, pLastNodeInList);
}
BSTreeNode* Convert_Solution1(BSTreeNode* pHeadOfTree)
{
BSTreeNode *pLastNodeInList = NULL;
ConvertNode(pHeadOfTree, pLastNodeInList);
// Get the head of the double-linked list
BSTreeNode *pHeadOfList = pLastNodeInList;
while(pHeadOfList && pHeadOfList->m_pLeft)
pHeadOfList = pHeadOfList->m_pLeft;
return pHeadOfList;
}
- 笔试面试之将2叉查找树转换为双向链表
- 面试100题系列之1将查找二叉树转换成有序的双向链表
- 程序员面试金典——解题总结: 9.17中等难题 17.13将二叉查找树转换为双向链表
- 将二叉查找树转换为有序的双向链表
- 二叉查找树转换为双向链表
- 查找二叉树转换为排序的双向链表
- 二叉查找树转换为有序双向链表
- 二叉查找树转换为双向链表
- 二进制查找树转换为双向链表
- 二叉查找树转换为有序双向链表---微软
- 递归将二叉树转换为双向链表
- 将二叉搜索树转换为双向链表
- 将二叉搜索树转换为双向链表
- 将二叉树转换为排序双向链表
- 笔试面试之字符串转换为整数
- 微软面试100题系列---把二叉查找树转换成排序的双向链表
- java之二叉搜索树转换为双向链表
- 【IT笔试面试题整理】二叉搜索树转换为双向链表
- I Swear (我发誓)
- C# 通过窗口句柄获取程序运行路径 通过程序运行路径获取程序图标
- 免密码ssh设置
- Ubuntu 10.04 安装显卡驱动后 开机自动调整屏幕亮度
- Office 2010 Tech Gurantee(技术保障)在中国启动啦!
- 笔试面试之将2叉查找树转换为双向链表
- make,make clean,make depend的区别
- HTTP 状态代码 GOOGLE
- 解决CLUSTER不能关闭的问题!
- 用隐含参数强制打开了一个损坏的数据库!
- html-css-js的几款前端开发工具
- Windows Azure入门教学系列 (九):Windows Azure 诊断功能
- 老业务员的忠告【销售为王】
- 在ASP.NET操作Excel文件