将二叉搜索树转换成一个排序的双向链表
2017-07-31 13:49
507 查看
先用一个具体实例来描述一下这个问题
二叉搜索树的中序遍历,当遍历到根节点时,它的左子树已经成为一个排序链表了,所以将根节点与链表中的最后一个节点连接起来。此时根节点为链表的最后一个节点,再将根节点与右子树中最小的值连接起来。 所以转换时需要知道链表的最后一个节点
具体代码实现:
二叉搜索树的中序遍历,当遍历到根节点时,它的左子树已经成为一个排序链表了,所以将根节点与链表中的最后一个节点连接起来。此时根节点为链表的最后一个节点,再将根节点与右子树中最小的值连接起来。 所以转换时需要知道链表的最后一个节点
具体代码实现:
//二叉搜索树转换为双向链表 BinarySearchTreeNode<V>* TreeToList() { BinarySearchTreeNode<V>* pTailNode = NULL;//指向双向链表的尾结点 _TreeToList(_pRoot, &pTailNode); //返回头结点 BinarySearchTreeNode<V>* pHead = pTailNode; while (pHead && pHead->_Left) pHead = pHead->_Left; while (pHead)//打印双向链表 { cout << pHead->_val <<" "; pHead = pHead->_Right; } cout << endl; return pHead; } //递归转换 void _TreeToList(BinarySearchTreeNode<V>* pRoot, BinarySearchTreeNode<V>** pTailNode) { if (pRoot == NULL) return; BinarySearchTreeNode<V>* pCur = pRoot; //中序遍历二叉树 if (pCur->_Left != NULL)//遍历左子树 _TreeToList(pCur->_Left, pTailNode); pCur->_Left = *pTailNode;//当前结点的左指针链表的尾 if (*pTailNode != NULL) (*pTailNode)->_Right = pCur; *pTailNode = pCur;//此时链表最后一个节点为当前节点 if (pCur->_Right != NULL)//遍历右子树 _TreeToList(pCur->_Right, pTailNode); }
相关文章推荐
- 将二叉搜索树转换成一个排序的双向链表
- 题目:将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 将二叉搜索树转换成一个排序的双向链表
- 牛客原题 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 【面试题】剑指offer27--将一颗二叉搜索树转换成一个排序的双向链表
- 输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。
- (Java实现)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 剑指offer面试题-二叉搜索树转换成一个排序的双向链表
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 二叉树--将二叉搜索树转换成一个排序的双向链表
- 二叉搜索树转换成一个排序的双向链表
- 数据结构:将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序的双向链表
- java 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 牛客网-二叉搜索树转换成一个排序的双向链表
- day17之将二叉搜索树转换成一个排序的双向链表
- 将二叉搜索树转换成一个排序双向链表
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 将二叉搜索树转换成一个排序的双向链表--中序线索化的变型。