算法练习1(二元查找树转换成双向链表)
2013-11-18 21:07
225 查看
1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
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);
}
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
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);
}
相关文章推荐
- 【算法题】二元查找树转换成排序的双向链表
- 每天学习一算法系列(2)(把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.)
- 每天学一个算法(2)------二元查找树转变成排序的双向链表
- 1将该二元查找树转换成一个排序的双向链表
- 练习1:把二元查找树转变成排序的双向链表
- 二元查找树转换成一个排序的双向链表
- 二元查找树转换成一个排序的双向链表
- 【练习】把二元查找树转变成排序的双向链表
- 二元查找树转换成一个排序的双向链表
- 二元查找树转换成一个排序的双向链表
- 把二元查找树转变成排序的双向链表——精选微软经典的算法面试100题中第一题
- (算法)二叉树转换为双向链表
- 把二元查找树转换成排序的双向链表
- 把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- 把二元查找树转换成排序的双向链表
- 二元查找树与排序的双向链表的转换
- (三)二元查找树转换双向链表
- 关于把二元查找树变成排序的双向链表算法的理解
- 【老鸟学算法】二元查找树转变成排序的双向链表——算法思想及java实现
- 二元查找树转换成一个排序的双向链表