剑指offer:二叉搜索树与双向链表
来源:互联网 发布:淘宝镜子自拍模特设备 编辑:程序博客网 时间:2024/05/16 13:07
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
1.递归
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: TreeNode* leftLast=NULL; TreeNode* Convert(TreeNode* pRootOfTree) { if(pRootOfTree==NULL){ return NULL; } TreeNode* left=Convert(pRootOfTree->left); if(left){ leftLast->right=pRootOfTree; pRootOfTree->left=leftLast; } leftLast=pRootOfTree; TreeNode* right=Convert(pRootOfTree->right); if(right){ right->left=pRootOfTree; pRootOfTree->right=right; } return left==NULL?pRootOfTree:left; }};添加笔记
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) { stack<TreeNode*> stk; TreeNode* p=pRootOfTree; TreeNode* newRoot=NULL; TreeNode* pre=NULL; bool isFirst=true; while(p!=NULL || !stk.empty()){ while(p!=NULL){ stk.push(p); p=p->left; } if(!stk.empty()){ p=stk.top(); stk.pop(); if(isFirst){ isFirst=false; newRoot=p; pre=p; }else{ pre->right=p; p->left=pre; pre=p; } p=p->right; } } return newRoot; }};
用非递归可以更加的清晰
1 0
- 剑指Offer二叉搜索树与双向链表
- 【剑指offer:】Q27:二叉搜索树与双向链表
- 剑指offer--二叉搜索树与双向链表
- 剑指offer 27 - 二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 《剑指offer》二叉搜索树与双向链表
- 【剑指Offer】二叉搜索树与双向链表
- 剑指offer—二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 剑指Offer--027-二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- [剑指offer]二叉搜索树与双向链表
- 《剑指offer》-二叉搜索树与双向链表
- 剑指offer-27二叉搜索树与双向链表
- 剑指offer题解 二叉搜索树与双向链表
- 剑指offer|二叉搜索树与双向链表
- 【剑指offer】二叉搜索树与双向链表
- 我论电子游戏——游戏始终游戏,现实毕竟现实
- 几种常用加密算法比较
- 腾讯技术面试题
- Redis+Spring缓存实例
- 匿名者课堂讲课记录.2016年4月25日,美国时间2016年4月24日,星期天.
- 剑指offer:二叉搜索树与双向链表
- 新项目的一些基本问题以及解决方案
- NtQueryObject 函数
- 唯爱小粽子:软件架构的典型组成部分-用户界面设计
- paintEvent调用时机
- OSG学习笔记6—鸟瞰图相机
- 【步兵 经验篇】 快速开发之我来带你飞
- Android面试题——异步任务AsyncTask使用解析
- 分治/减治/变治