算法-二叉树转双向链表
2013-10-14 10:55
330 查看
原文链接:点击打开链接、
不申请新节点 将二叉树转换成双向链表
总结一下:在中序遍历中 进行转换
原题:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
之后就是定义三个功能函数了:
1.创建二元查找树的addBSTreeNode(BSTreeNode * & pCurrent,int value);
2.遍历二元查找树的void
3.
ps:写的不错,July在算法上有非常深的功底,他的博文主页:http://my.csdn.net/v_july_v
不申请新节点 将二叉树转换成双向链表
总结一下:在中序遍历中 进行转换
原题:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
之后就是定义三个功能函数了:
1.创建二元查找树的addBSTreeNode(BSTreeNode * & pCurrent,int value);
2.遍历二元查找树的void
ergodicBSTree(BSTreeNode * pCurrent);
3.
二叉树转换成list的
convertToDoubleList(BSTreeNode * pCurrent);
3.源码:
借用结构之法算法之道博主July写的源码
struct BSTreeNode { int m_nValue; BSTreeNode* m_pLeft; BSTreeNode* m_pRight; }; typedef BSTreeNode DoubleList; DoubleList * pHead; DoubleList * pListIndex; void convertToDoubleList(BSTreeNode* pCurrent); //创建二叉查找树 void addBSTreeNode(BSTreeNode * &pCurrent, int value) //传的是pRoot的地址,所以对pCurrent的操作就是对pRoot的操作 { if (pCurrent == NULL) { BSTreeNode* pBSTree = new BSTreeNode(); pBSTree->m_pLeft = NULL; pBSTree->m_pRight = NULL; pBSTree->m_nValue = value; pCurrent = pBSTree; } else { if ((pCurrent->m_nValue) > value) { addBSTreeNode(pCurrent->m_pLeft, value); } else if((pCurrent->m_nValue) < value) { addBSTreeNode(pCurrent->m_pRight, value); } else cout<<"重复加入节点"<<endl; } } void ergodicBSTree(BSTreeNode* pCurrent) { if (pCurrent == NULL) { return; } if (pCurrent->m_pLeft != NULL) { ergodicBSTree(pCurrent->m_pLeft); } convertToDoubleList(pCurrent); if (pCurrent->m_pRight != NULL) { ergodicBSTree(pCurrent->m_pRight); } } void convertToDoubleList(BSTreeNode* pCurrent) { pCurrent->m_pLeft = pListIndex; if (pListIndex != NULL) { pListIndex->m_pRight = pCurrent; } else { pHead = pCurrent; } pListIndex = pCurrent; cout<<pCurrent->m_nValue<<endl; }
ps:写的不错,July在算法上有非常深的功底,他的博文主页:http://my.csdn.net/v_july_v
相关文章推荐
- 算法-二叉树转双向链表
- 程序员面试100题(算法)之把二叉查找树转变成排序的双向链表(含二叉树前序创建、递归)
- PHP数据结构与算法:二叉树
- 算法实验-二叉树的创建和前序-中序-后序-层次 遍历
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- 第10周项目1-验证算法(2)二叉树构造算法的验证
- 显示二叉树的算法
- 关于二叉树后续遍历算法的一点思考
- 转 关于二叉树的算法
- 算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现
- 数据算法之二叉树删除(BinaryTreeL Remove)的Java实现
- 算法(二叉树)--- 根据先序、中序遍历重建二叉树
- 【算法和数据结构】二叉树的定义和封装(C++实现)
- 第十周项目3中序线索化二叉树的算法验证
- Swift 算法实战之路:二叉树
- 二叉树按层遍历打印的算法(c/c++)
- 第十周【项目1 - 二叉树构造算法验证】(2)
- 二叉树创建及遍历算法(递归及非递归)
- 【数据结构和算法】二叉树
- 算法大全(3) 二叉树