剑指offer第二十六题【二叉搜索树与双向链表】c++实现
2015-10-21 15:35
495 查看
二叉搜索树与双向链表
参与人数:1237时间限制:1秒空间限制:32768K
通过比例:24.74%
最佳记录:0 ms|8552K(来自 牛客456244号)
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
主要思路:
中序遍历,遍历的顺序就是,数值从小到大
用一个指针指向,当前指针的前一个节点,然后改变left和right的指向。
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(!pRootOfTree){
return NULL;
}
stack<TreeNode* > sta;
TreeNode *pre=NULL;
TreeNode *current=pRootOfTree;
while(current||!sta.empty()){
if(current){
sta.push(current);
current=current->left;
}else{
current=sta.top();
if(pre==NULL){
pRootOfTree=current;
pre=current;
}else{
pre->right=current;
current->left=pre;
pre=current;
}
sta.pop();
current=current->right;
}
}
return pRootOfTree;
}
参与人数:1237时间限制:1秒空间限制:32768K
通过比例:24.74%
最佳记录:0 ms|8552K(来自 牛客456244号)
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。主要思路:
中序遍历,遍历的顺序就是,数值从小到大
用一个指针指向,当前指针的前一个节点,然后改变left和right的指向。
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(!pRootOfTree){
return NULL;
}
stack<TreeNode* > sta;
TreeNode *pre=NULL;
TreeNode *current=pRootOfTree;
while(current||!sta.empty()){
if(current){
sta.push(current);
current=current->left;
}else{
current=sta.top();
if(pre==NULL){
pRootOfTree=current;
pre=current;
}else{
pre->right=current;
current->left=pre;
pre=current;
}
sta.pop();
current=current->right;
}
}
return pRootOfTree;
}
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总