剑指offer-27二叉搜索树与双向链表
来源:互联网 发布:1099端口占用 编辑:程序博客网 时间:2024/05/17 04:56
题目:输入一个2叉搜索树,将该二叉搜索树转换成一个排序的链表。要求不能创建任何新的节点,只能调整书中节点指针的指向。
由于要求转换后的链表是排序的,而中序遍历可以从小到大遍历二叉树的每个节点,因此可以中序遍历该二叉树。
当遍历到根节点时,它的左子树已经转换成一个排序的链表,把链表的最后结点与根节点相连即把根节点加入排序链表,接着遍历转换右子树,转换左子树和右子树可以用递归的方法完成。
代码如下:
/*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* LastNodeInList=NULL; ConvertTree(pRootOfTree,&LastNodeInList); TreeNode* Head=LastNodeInList; while(Head!=NULL&&Head->left!=NULL) Head=Head->left; return Head; } void ConvertTree(TreeNode* pRoot,TreeNode** LastNodeInList) { if(pRoot==NULL) return; TreeNode* Current=pRoot; //若当前节点的左孩子不为空,继续递归调用 if(Current->left!=NULL) ConvertTree(Current->left,LastNodeInList); //将当前节点的左孩子设为双链表的尾节点 Current->left=*LastNodeInList; //如果尾节点不为空的话,将尾节点的右孩子设为当前节点 if((*LastNodeInList)!=NULL) (*LastNodeInList)->right=Current; //尾节点设为当前节点 (*LastNodeInList)=Current; //若当前节点还有右孩子,则继续递归调用 if(Current->right!=NULL) ConvertTree(Current->right,LastNodeInList); }};
0 0
- 剑指offer 27 - 二叉搜索树与双向链表
- 剑指offer-27二叉搜索树与双向链表
- 剑指Offer 27 二叉搜索树与双向链表
- 剑指offer 27 二叉搜索树与双向链表
- 剑指Offer二叉搜索树与双向链表
- 【剑指offer:】Q27:二叉搜索树与双向链表
- 剑指offer--二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 《剑指offer》二叉搜索树与双向链表
- 【剑指Offer】二叉搜索树与双向链表
- 剑指offer—二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 剑指Offer--027-二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- [剑指offer]二叉搜索树与双向链表
- 《剑指offer》-二叉搜索树与双向链表
- 剑指offer题解 二叉搜索树与双向链表
- 简单定时器 Timer
- LeetCode Compare Version Numbers
- 【leetcode】Data Stream as Disjoint Intervals
- 手机开发实战60——语音信箱介绍2
- Android Service实现闹钟
- 剑指offer-27二叉搜索树与双向链表
- 网络图片+修改导航样式
- 真假泰版球衣知识
- 疑惑:自定义控件中 TypedArray对象进行为什么要进行recycle()
- VACUUM PostgreSQL 手册
- textFied随着键盘移动
- java-maven
- VMware ESXi自动化部署实践
- leetcode笔记—关于买股票