算法习题2:将二叉树转换成双向链表
来源:互联网 发布:淘宝网怎么解绑手机号 编辑:程序博客网 时间:2024/06/09 19:25
继续上上篇博客,只写了一个二叉树常用方法,上篇中有些不足:
1、添加新节点 那段代码可以独立出来,用递归方式写成
void insertNode(BSTree* &p, int value)
{
if(p == NULL){
p = new BSTree();
p->value = value;
p->bsLeft = NULL;
p->bsRight = NULL;
return;
}
if(value < p->value)
insertNode(p->bsLeft, value);
else if(value >= p->value)
insertNode(p->bsRight, value);
}
2、查找也同上进行更改,递归调用自身
------------------------------------------------
这里引入一个新问题
1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
*/
这里考虑下,我们遍历的时候是按顺序输出,那我们是有办法得到这个顺序链表的,所以只要对遍历函数稍加改变即可
这里引入两个共有变量
BSTree* cur = NULL; BSTree*dchain_head = NULL;
加入下面着两个函数,主要的是第二个
void printDoubleChain(); voidch(BSTree*);
实现如下:
void ch(BSTree* p) { if(p==NULL){return; } ch(p->bsLeft); //这里把打印变成记录我们当前双向链表记录的指针,只要控制让他们形成链表关系就可以了if(cur == NULL){ cur = p;dchain_head = cur; }else{ cur->bsRight = p; p->bsLeft = cur;cur = p; } // ch(p->bsRight); }
打印如下
void printDoubleChain() { cur =dchain_head; cout<<"from left to right"<<endl;while(cur->bsRight!=NULL){ cout<<cur->value<<" ";cur = cur->bsRight; } cout<<cur->value<<" ";//这里不想让cur跑到结尾空出,所以尾巴单独打印 //下面重新逆向循环 cout<<"from right toleft"<<endl; while(cur->bsLeft!=NULL){cout<<cur->value<<" "; cur = cur->bsLeft; }cout<<cur->value<<" "; }
- 算法习题2:将二叉树转换成双向链表
- 将二叉搜索树转换成双向链表
- 将二叉树转换成双向链表
- 将二叉搜索树转换成双向链表
- 数据结构 将搜索二叉树转换成双向链表
- 将搜索二叉树转换成双向链表
- 将搜索二叉树转换成双向链表
- 将一个二叉搜索树转换成双向链表
- 将搜索二叉树转换成双向链表
- 将搜索二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 将二叉树按中序遍历转换成双向链表
- 链表问题---将搜索二叉树转换成双向链表
- 资格赛:拯救宇宙
- 设计模式之strategy(策略模式)
- MSVCRTD.lib(crtexew.obj) :&…
- 算法习题1:二叉树实现增删改查
- 将博客搬至CSDN
- 算法习题2:将二叉树转换成双向链表
- 算法习题3:设计包含min函数的栈
- 搞清九个先后顺序
- 二叉树前序、中序、后序遍历相互求法
- Creating a Component with a variable number of output parameters(创建一个动态输出参数的计算器)
- 《unix环境高级编程》第二版 第八章 进程控制 知识点
- 关于Linu型的一些基础常见操作命令(三)——文件属性操作
- 如何实现网站的多语言版本?
- Cuckoo Search