面试题27_二叉搜索树与双向链表
来源:互联网 发布:windows phone官网 编辑:程序博客网 时间:2024/04/29 18:02
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
采用中序遍历方法,注意指针指向。left指向小于当前值的数,right指向大于当前值的数。
利用pLast来指向当前转换好的链表的最大值,即最后一个节点。
首先转换左子树,其次,连接上根节点,之后,转换右子树。
实现代码
<span style="font-size:18px;">/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public: TreeNode* Convert(TreeNode* pRootOfTree) { TreeNode *pLast = nullptr; if(pRootOfTree == nullptr) return nullptr; ConvertTreeToList(pRootOfTree, &pLast); TreeNode *pHead = pLast; while(pHead->left != nullptr && pHead != nullptr) pHead = pHead->left; return pHead; } void ConvertTreeToList(TreeNode *root, TreeNode **pLast) { if(root == nullptr) return; TreeNode *pCurNode = root; if(pCurNode->left != nullptr) ConvertTreeToList(pCurNode->left, pLast); pCurNode->left = *pLast; if(*pLast != nullptr) (*pLast)->right = pCurNode; *pLast = pCurNode; if(pCurNode->right != nullptr) ConvertTreeToList(pCurNode->right, pLast); }};</span>
1 0
- 面试题27_二叉搜索树与双向链表
- 剑指Offer_面试题27_二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题27:二叉搜索树与双向链表
- 面试题24:二叉搜索树与双向链表
- 面试题31:二叉搜索树与双向链表
- 【面试题25】二叉搜索树与双向链表
- 面试题27. 二叉搜索树与双向链表
- 面试题27:二叉搜索树和双向链表
- [剑指offer][面试题27]二叉搜索树与双向链表
- [剑指offer]面试题27 二叉搜索树与双向链表
- 暑假集训第三周 STL 双队列
- 扩展欧几里得算法(两行代码求最大公约数)
- 单链表操作
- Android AsyncTask
- 壁纸 - 精选热门高清图片和主题专辑
- 面试题27_二叉搜索树与双向链表
- 在虚拟机中部署dpdk
- hdu 1004 Let the Balloon Rise(水)
- Scala界面Panel、Layout初探
- 笔试/面试题记录
- OC 中 的copy 功能 深复制 和 浅复制 的 区别
- 数组的排序
- 3. Java面向对象之泛型-指定多个泛型
- 线程本地化ThreadLocal