把搜索二叉树转换成双向链表
2013-12-14 21:05
246 查看
题目来自<<剑指offer>>,这个是本人的代码,和原书不一样.
思想:利用中序遍历中的递归思路,先转换左子树,然后转换右子树,然后就转换完成.这里关键点是传入一个前驱指针,用于和当前节点的连接.
代码:
这里是测试代码(上接9种二叉树遍历的代码)
思想:利用中序遍历中的递归思路,先转换左子树,然后转换右子树,然后就转换完成.这里关键点是传入一个前驱指针,用于和当前节点的连接.
代码:
//这里要特别注意一点:prev的值必须有指向,即不能为空,否则,会造成值传递,从而错误. //其实这里改成指针的引用比较好. //void convert(BST_node *pRoot,BST_node** prev) //{ // if ( pRoot ){ // convert(pRoot->m_pLeft,prev); // pRoot->m_pLeft = *prev; // // if ( *prev ){ // (*prev)->m_pRight = pRoot; // } // // pRoot->m_pLeft =*prev; // // *prev = pRoot; // convert(pRoot->m_pRight,prev); // } //} //其实这里改成指针的引用版本. void myconvert(BST_node *pRoot,BST_node*& prev) { if ( pRoot ){ myconvert(pRoot->m_pLeft,prev); pRoot->m_pLeft = prev; if ( prev ){ prev->m_pRight = pRoot; } pRoot->m_pLeft =prev; prev = pRoot; myconvert(pRoot->m_pRight,prev); } }
这里是测试代码(上接9种二叉树遍历的代码)
int main() { //int pre[]={1,2,4,7,3,5,6,8}; //int mid[]={4,7,2,1,5,3,8,6}; int pre[]={8,4,2,6,12,10,13}; int mid[]={2,4,6,8,10,12,13}; BST_node* pRoot = build_BST(pre,mid,7); // print_preorder_reserve(pRoot); // cout<<endl; // print_preorder_noreserve(pRoot); // print_preorder_nostack(pRoot); /* print_inorder_reserve(pRoot); cout<<endl; print_inorder_noreserve(pRoot); print_inorder_nostack(pRoot);*/ //print_postorder_noreserve(pRoot); /* print_postorder_reserve(pRoot); cout<<endl; print_postorder_nostack(pRoot);*/ BST_node *prev = NULL; myconvert(pRoot,prev); for ( ; prev ;prev=prev->m_pLeft ){ cout<<prev->m_value<<" "; } /*for ( ; (*prev)->m_pLeft ; (*prev)=(*prev)->m_pLeft ){ cout<<(*prev)->m_value<<" "; }*/ cout<<endl; }
相关文章推荐
- 将搜索二叉树转换成双向链表
- 二叉搜索树(搜索二叉树)转换成一个双向链表
- 二叉搜索树(搜索二叉树)转换成一个双向链表
- 数据结构 将搜索二叉树转换成双向链表
- BST(搜索二叉树)与双向链表相互转换
- 将搜索二叉树转换成双向链表
- 链表问题---将搜索二叉树转换成双向链表
- 搜索二叉树转换为双向链表
- 将搜索二叉树转换成双向链表
- 二叉树转换成双向链表
- 把二叉树转换为双向链表
- 二叉树转换成双向链表
- 数据结构 算法面试100题 之 二叉树转换成双向链表
- 二叉树按中序遍历顺序转换成双向链表
- 链表节点面试100题系列之1将查找二叉树转换成有序的双向链表
- 搜索二叉树实现->迭代器实现->转化为双向链表
- 二叉树转换成双向链表
- 将一棵二叉树转换为双向链表的俩中算法
- 二叉树转换成双向链表
- 数据结构:题目(1)二叉树转换为双向链表