剑指offer-面试题27:二叉搜索树与双向链
来源:互联网 发布:人才市场管理系统java 编辑:程序博客网 时间:2024/06/06 23:58
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点只能调整树中结点指针的指向。
思路:对于二叉搜索树,根结点的左子树都比它小,右子树都比它大,如果按照中序遍历那么结点就是排序的,问题的关键是如何修改指针指向。假设左右子树已经排序,那么只要将左子树的尾结点连接上根结点,根结点连接上右子树就可以了。关于怎么连接左右子树,还是有一点技巧的。我们每次连接完成之后都更新尾结点,因为每次连接都要用到尾结点,把它作为转换函数的一个参数传进去。左子树转换后的尾结点连接根结点,然后根结点作为新的尾结点去连接右子树。左右子树的转换等同于于根结点的转换,因此这是一个递归的过程。
BinaryTreeNode* Convert(BinaryTreeNode* pRoot){ BinaryTreeNode* pLastNodeInList = NULL; ConvertNode(pRoot, &pLastNodeInList); BinaryTreeNode* pHeadOfList = pLastNodeInList; while(pHeadOfList != NULL && pHeadOfList->m_pLeft != NULL) pHeadOfList = pHeadOfList->m_pLeft; return pHeadOfList;}ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode** pLastNodeInList){ if(pNode == NULL) return; if(pNode->m_pLeft != NULL) ConvertNode(pNode->m_pLeft, pLastNodeInList); BinaryTreeNode* pCurrent = pNode; if(*pLastNodeInList != NULL) pLastNodeInList->m_pRight = pCurrent; pCurrent->m_pLeft = *pLastNodeInList; *pLastNodeInList = pCurrent; if(pNode->m_pRight != NULL) ConvertNode(pNode->m_pRight, pLastNodeInList);}
0 0
- [剑指offer][面试题27]二叉搜索树与双向链表
- [剑指offer]面试题27 二叉搜索树与双向链表
- 剑指Offer:面试题27 二叉搜索树与双向链表
- 《剑指Offer》 面试题27:二叉搜索树与双向链表
- 《剑指Offer》学习笔记--面试题27:二叉搜索树与双向链表
- 剑指offer 面试题27—二叉搜索树与双向链表
- 剑指offer--面试题27:二叉搜索树与双向链表--Java实现
- 【剑指Offer学习】【面试题27:二叉搜索树与双向链表】
- 剑指Offer面试题27(Java版):二叉搜索树与双向链表
- 剑指offer-面试题27:二叉搜索树与双向链
- 剑指offer之面试题27:二叉搜索树与双向链表
- 剑指offer之面试题27二叉搜索树与双向链表
- 剑指Offer----面试题27:二叉搜索树与双向链表
- 剑指Offer-面试题27:二叉搜索树与双向链表
- 剑指Offer:面试题27——二叉搜索树与双向链表(java实现)
- 剑指offer面试题27:二叉搜索树与双向链表
- 剑指offer--面试题27:二叉搜索树与双向链表
- 剑指Offer面试题27(Java版):二叉搜索树与双向链表
- 自动化测试常用断言的使用方法(python)
- POJ3621 Sightseeing Cows
- 003 ZeroMQ PUSH and POLL
- 创建链表
- jvm memory
- 剑指offer-面试题27:二叉搜索树与双向链
- 求阶乘
- MySQL 主从复制与读写分离概念及架构分析
- ubuntu 新手入门
- UVA Live 6437 Power Plant 最小生成树
- 1007. 素数对猜想 (20)——做题纪录
- javascript入门
- ZOJ 3712 Hard to Play
- 我的设置 of Ubuntu