算法练习1(二元查找树转换成双向链表)
来源:互联网 发布:卖家如何开通淘宝客 编辑:程序博客网 时间:2024/05/18 20:33
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
#include<stdio.h>
#include<stdlib.h>
struct BSTreeNode
{
int value;
struct BSTreeNode* nleft;
struct BSTreeNode* nright;
}BSTNode;
void addBSTreeNode(BSTreeNode* &btn,int ch)
{
if(btn==NULL)
{
BSTreeNode *bn=(BSTreeNode*)malloc(sizeof(BSTNode));
bn->value=ch;
bn->nleft=NULL;
bn->nright=NULL;
btn=bn;
}else
{
if((btn->value) > ch)
addBSTreeNode(btn->nleft,ch);
else if(btn->value < ch)
addBSTreeNode(btn->nright,ch);
}
}
void InOrder(BSTreeNode *btn)
{
if(btn)
{
InOrder(btn->nleft);
printf("node: %d\n",btn->value);
InOrder(btn->nright);
}
}
void change(BSTreeNode *p,BSTreeNode* &last)
{
if(!p) return;
change(p->nleft,last);
if(last)
last->nright=p;
p->nleft=last;
last=p;
change(p->nright,last);
}
void PrintList(BSTreeNode *p)
{
while(p!=NULL)
{
printf("List node: %d\n",p->value);
p=p->nleft;
}
}
void main()
{
BSTreeNode *nroot,*tail;
nroot=NULL;
tail=NULL;
addBSTreeNode(nroot,10);
addBSTreeNode(nroot,4);
addBSTreeNode(nroot,6);
addBSTreeNode(nroot,8);
addBSTreeNode(nroot,12);
addBSTreeNode(nroot,14);
addBSTreeNode(nroot,16);
InOrder(nroot);
change(nroot,tail);
//printf("%d\n",tail->nleft->value);
PrintList(tail);
}
- 算法练习1(二元查找树转换成双向链表)
- 二元查找树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 将二叉查找树转换成双向链表 java实现
- 二叉查找树转化成双向链表
- 01二叉查找树转化成双向链表
- 数据结构 算法面试100题 之 二叉树转换成双向链表
- 算法习题2:将二叉树转换成双向链表
- 把二叉树转换成双向链表
- 二叉搜索树转换成双向链表
- 将二叉搜索树转换成双向链表
- 把搜索二叉树转换成双向链表
- 二叉搜索树转换成双向链表
- PL/SQL Developer 显示中文乱码问题
- GMF学习之三tianpan例子之图形模型定义
- drivertype=fs和drivertype=wdm
- 太乐了(借鉴的贺老师的)(不会啊)
- C++ 格式化输出
- 算法练习1(二元查找树转换成双向链表)
- 时间过得真快
- 静态查找
- hdu 3037 Saving Beans( lucas定理+隔板法 )
- 关于分形学
- ms sql 获取字符串首字母
- 11.C++ 内联函数
- Chuck Goldman:乔布斯从来不会说苹果不是企业应用的公司
- 动态查找