二叉树转换成双向链表
来源:互联网 发布:js 设置控件不可用 编辑:程序博客网 时间:2024/04/30 13:18
二叉树中,每个节点都有两个指针,双向链表中每个节点也有两个指针。在转换过程中,我们可以让双向链表中的节点的前驱指向左孩子的最右断,后继指向右孩子的最左端。代码如下:
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;
}
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 二叉树转换成双向链表
- 把二叉树转换成双向链表
- 二叉搜索树转换成双向链表
- 将二叉搜索树转换成双向链表
- 把搜索二叉树转换成双向链表
- 二叉搜索树转换成双向链表
- 将二叉树转换成双向链表
- 将二叉搜索树转换成双向链表
- 数据结构 将搜索二叉树转换成双向链表
- 将搜索二叉树转换成双向链表
- 将搜索二叉树转换成双向链表
- 二叉搜索树转换成双向链表
- 将一个二叉搜索树转换成双向链表
- 好气,action死活取不到input中的值
- .Net中访问数据库学习笔记
- Linux常用命令大全
- Github 搭建 hexo (五)- 站点地图(sitemap.xml)
- noj 1081 组织集体活动
- 二叉树转换成双向链表
- 欢迎使用CSDN-markdown编辑器
- HDU 1087 —— Super Jumping! Jumping! Jumping!
- SDWebImage内部实现过程
- handler机制的原理
- Android Wear 进阶 5 - Creating Watch Faces 创建手表的界面(表盘)
- 文件编辑
- Java编程思想初学
- Android中的5种数据存储方式