【剑指Offer】二叉搜索树与双向链表
来源:互联网 发布:南京大学cssci数据库 编辑:程序博客网 时间:2024/05/17 02:27
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
算法描述
使用递归,分别去将当前节点的左右子树变成双向链表,然后获取左边链表的最后一个元素,当前元素的左指针指向它,它的右指针指向当前元素;右边链表的第一个元素,它的左指针指向当前元素,当前元素的右指针指向它;然后从当前元素开始,不断从左边找,找到第一个元素,返回此元素的指针。
总结:
对这种涉及到二叉树的题目,可以使用测试驱动开始,先写测试用例,然后再编码。
代码实现
#include <iostream>using std::cout;using std::cin;using std::endl;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* p = pRootOfTree; TreeNode* pl; TreeNode* pr; if( p != NULL ) { pl = Convert(p->left); pr = Convert(p->right); p->right= pr; if(pr){ pr->left = p; } while(pl&&pl->right){ pl = pl->right; } if(pl) pl->right= p; p->left= pl; while(p->left){ p = p->left; } } return p; }};int main(){ TreeNode* p1 = new TreeNode(1); TreeNode* p2 = new TreeNode(2); TreeNode* p3 = new TreeNode(3); TreeNode* p4 = new TreeNode(4); TreeNode* p5 = new TreeNode(5); TreeNode* p6 = new TreeNode(6); TreeNode* p7 = new TreeNode(7); p4->left = p2; p4->right= p6; p2->left = p1; p2->right= p3; p6->left= p5; p6->right= p7; Solution s; TreeNode* p = s.Convert(p4); while(p->right){ cout<<p->val<<" "; p = p->right; } cout<<p->val<<" "; cout<<"\n"; while(p->left){ cout<<p->val<<" "; p = p->left; } cout<<p->val<<" ";}
1 0
- 剑指Offer二叉搜索树与双向链表
- 【剑指offer:】Q27:二叉搜索树与双向链表
- 剑指offer--二叉搜索树与双向链表
- 剑指offer 27 - 二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 《剑指offer》二叉搜索树与双向链表
- 【剑指Offer】二叉搜索树与双向链表
- 剑指offer—二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 剑指Offer--027-二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- [剑指offer]二叉搜索树与双向链表
- 《剑指offer》-二叉搜索树与双向链表
- 剑指offer-27二叉搜索树与双向链表
- 剑指offer题解 二叉搜索树与双向链表
- 剑指offer|二叉搜索树与双向链表
- 【剑指offer】二叉搜索树与双向链表
- 【剑指Offer】二叉树中和为某一值的路径
- PopupWindow的使用
- ubuntu 安装tengine
- Leetcode Best Time to Buy and Sell Stock
- Widget的使用
- 【剑指Offer】二叉搜索树与双向链表
- 最近忙得实在是不行
- 基于VSM的命名实体识别、歧义消解和指代消解
- Binary Search Tree 二叉查找树
- Eclipse快捷键大全
- Android下拉刷新实现原理
- git & repo 命令
- Qt文件操作之——QFileDialog保存文件
- Discuz!$_G变量的使用方法