二叉树转换成双向链表

二叉树中,每个节点都有两个指针,双向链表中每个节点也有两个指针。在转换过程中,我们可以让双向链表中的节点的前驱指向左孩子的最右断,后继指向右孩子的最左端。代码如下:



struct BinaryTree
{
char data;
BinaryTree *mLeft;
BinaryTree *mRight;
};


BinaryTree* BuyNode()
{
BinaryTree *s = (BinaryTree*)malloc(sizeof(BinaryTree));
memset(s,0,sizeof(BinaryTree));
return s;
}
void FreeNode(BinaryTree *s)
{
free(s);
s=NULL;
}
 
BinaryTree* CreateTree(char *&str)
{
BinaryTree *s = NULL;
if(*str!='#')
{
s = BuyNode();
s->data = *str;
s->mLeft = CreateTree(++str);
s->mRight = CreateTree(++str);
}
return s;
}


void ConvertNode(BinaryTree *root,BinaryTree **pLastNode)
{
if(root==NULL)return;
BinaryTree *pCurrent = root;
if(pCurrent->mLeft!=NULL)
{
ConvertNode(root->mLeft,pLastNode);
}
pCurrent->mLeft = *pLastNode;
if(*pLastNode!=NULL)
{
(*pLastNode)->mRight = pCurrent;
}
*pLastNode = pCurrent;


if(pCurrent->mRight!=NULL)
{
ConvertNode(root->mRight,pLastNode);
}
}
BinaryTree* Convert(BinaryTree *root)
{
BinaryTree *pLastNode = NULL;
ConvertNode(root,&pLastNode);


BinaryTree *HeadofList = pLastNode;
while(HeadofList!=NULL && HeadofList->mLeft!=NULL)HeadofList = HeadofList->mLeft;
return HeadofList;
}
int main()
{

char *str = "ABC##DE##F##G#H##";
BinaryTree *root = CreateTree(str);


BinaryTree *pHead = Convert(root);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值