剑指offer(27)——二叉搜索树与双向链表
来源:互联网 发布:噪声检测软件哪款好 编辑:程序博客网 时间:2024/06/06 17:54
题目
分析
可以在纸上画出一个二叉搜索树,把它转化为一个双向链表,我们不难发现:在二叉搜索树中,每个节点的指向左孩子的指针让它指向它的前一个节点,指向右孩子的指针让它指向它的后一个节点,经过这样的转换,二叉搜索树就转化成为一个双向链表。思想就是这样,理解思想代码实现也就不难了。还有一点就是,这棵树的根节点总比左孩子大比右孩子小,再转化为为双向链表时对应该节点的前驱总比该节点小,后继总比该节点大。
注:该题我只实现非递归版本的解法
代码实现
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};/************************************一、非递归版本1、按照中序遍历的原则将二叉树中的结点压栈,利用栈后进先出的特性先把最小的结点出栈 依次从小到大出栈,然后将每个结点的指向左孩子的指针改为指向前一个结点的指针,将 每个结点的指向右孩子的指针改为指向后一个结点的指针即可*************************************/class Solution {public: TreeNode* Convert(TreeNode* pRootOfTree) { if(pRootOfTree == NULL) return pRootOfTree; //始终指向此刻遍历到的数字中最大的那个数 TreeNode *pMaxInCurList; TreeNode *temp = pRootOfTree; stack<TreeNode *> NodeSt; while(temp || !NodeSt.empty()) { while(temp) { NodeSt.push(temp); temp = temp->left; } temp = NodeSt.top(); NodeSt.pop(); if(pMaxInCurList == NULL) { pMaxInCurList = temp; pRootOfTree = pMaxInCurList; } else { temp->left = pMaxInCurList; pMaxInCurList->right = temp; pMaxInCurList = temp; } temp = temp->right; } return pRootOfTree; }};
阅读全文
0 0
- 剑指offer—二叉搜索树与双向链表
- 剑指offer(27)——二叉搜索树与双向链表
- 剑指offer 27 - 二叉搜索树与双向链表
- 剑指offer-27二叉搜索树与双向链表
- 剑指Offer 27 二叉搜索树与双向链表
- 剑指offer 27 二叉搜索树与双向链表
- 剑指Offer:面试题27——二叉搜索树与双向链表(java实现)
- 剑指offer——面试题27:二叉搜索树与双向链表
- 剑指offer 面试题27—二叉搜索树与双向链表
- 剑指Offer——(26)二叉搜索树与双向链表
- 剑指offer——二叉搜索树与双向链表(好题)
- 剑指Offer二叉搜索树与双向链表
- 【剑指offer:】Q27:二叉搜索树与双向链表
- 剑指offer--二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 《剑指offer》二叉搜索树与双向链表
- 【剑指Offer】二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- useradd命令详解
- 连续子数组最大和
- UVA 12558 Egyptian Fractions (HARD version)
- 果断收藏!六大主流大日志采集处理分析平台架构分析
- Android ContentProvider,Uri,ContentResolver
- 剑指offer(27)——二叉搜索树与双向链表
- 上拉加载,下拉刷新(未实现)
- CSS系统2017.06.16 更新说明
- Ubuntu下清除DNS缓存的方法
- 【功能介绍】ITSOM企业级应用SaaS平台——服务申请及工单管理
- 两种方法解决js中touch和click冲突问题
- Hadoop分布式文件系统使用指南
- x86-64虚拟地址映射
- RTP-RTCP协议分析