【编程题目】把二元查找树转变成排序的双向链表(树)
2014-08-04 16:16
489 查看
1.把二元查找树转变成排序的双向链表(树)
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
我的思路:找到最小元素做头结点,不断的找其后继,调整指针的指向。写了一个半小时!
View Code
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树 节点的数据结构如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
我的思路:找到最小元素做头结点,不断的找其后继,调整指针的指向。写了一个半小时!
template<typename T> struct TreeNode { T data; TreeNode* pLChild; TreeNode* pRChild; }; // 要求两个输出参数要初始化为NULL template<typename T> void ConvertBSTree2List(TreeNode<T>* pTreeRoot/*树的根节点*/, TreeNode<T>*& pListHead/*双向链表的头指针*/, TreeNode<T>*& pListLast/*双向链表的尾指针*/) { if(pTreeRoot == NULL) { return; } // 中序遍历左子树 ConvertBSTree2List(pTreeRoot->pLChild, pListHead, pListLast); // 处理当前节点,把节点链到双向链表尾部 // 修改当前节点左指针,指向双向链表尾部 pTreeRoot->pLChild = pListLast; if(pListLast) // 非第一个节点 { pListLast->pRChild = pTreeRoot; } else // 第一个节点 { pListHead = pTreeRoot; } pListLast = pTreeRoot; // 中序遍历右子树 ConvertBSTree2List(pTreeRoot->pRChild, pListHead, pListLast); }
View Code
相关文章推荐
- 把二元查找树转变成排序的双向链表
- 微软面试100之1 把二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表
- 程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表—python实现
- 1.把二元查找树转变成排序的双向链表(树)
- 1.把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表(中序遍历)
- 二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表(树)
- 把二元查找树转变成排序的双向链表(微软面试)
- 1. 微软面试题:把二元查找树转变成排序的双向链表(树)
- 算法题22 把二元查找树转变成排序的双向链表(中序遍历)
- 数据结构 - 把二元查找树转变成排序的双向链表(C++)
- No1、把二元查找树转变成排序的双向链表(树)
- 面试题系列-----数据结构(把二元查找树转变成排序的双向链表(树))
- 把二元查找树转变成排序的双向链表(微软面试题)
- 关于把二元查找树转变成排序的双向链表(树)的C语言设计程序执行后出现段错误的问题
- 把二元查找树转变成排序的双向链表(树)
- Java实现: 把二元查找树转变成排序的双向链表(树)