把二元查找树转变成排序的双向链表
2015-05-13 21:34
381 查看
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
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
};
整个代码下载地址:http://download.csdn.net/detail/u010862116/8700639
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
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
};
解答
下面是具体函数的实现(java 敲多了 格式有点偏java)BSTreeNode* LeftMax(BSTreeNode *Node){ //获得当前节点左边树中最大值 if(Node->m_pRight != NULL){ return LeftMax(Node->m_pRight); }else{ return Node; } } BSTreeNode* RightMin(BSTreeNode *Node){ //获得当前节点右边树中最小值 if(Node->m_pLeft != NULL){ return RightMin(Node->m_pLeft); }else{ return Node; } } void Deal(BSTreeNode *Node){ //具体的处理函数 if(Node->m_pLeft != NULL){ Deal(Node->m_pLeft); Node->m_pLeft = LeftMax(Node->m_pLeft); //当前节点的左孩子指向 左边树下的最大的那个节点 Node->m_pLeft->m_pRight = Node; // 左边树下的最大的那个节点 的右孩子指向 当前节点 } if(Node->m_pRight != NULL){ Deal(Node->m_pRight); Node->m_pRight = RightMin(Node->m_pRight); //当前节点的右孩子指向 右边树下的最小的那个节点 Node->m_pRight->m_pLeft = Node; // 右边树下的最小的那个节点 的左孩子指向 当前节点 } }
整个代码下载地址:http://download.csdn.net/detail/u010862116/8700639
相关文章推荐
- 把二元查找树转变成排序的双向链表
- 算法-把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表 java版本
- 把二元查找树转变成排序的双向链表
- 微软等数据结构+算法面试100题(43)-- 把二元查找树转变成排序的双向链表
- 算法面试100题——1、把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 1.把二元查找树转变成排序的双向链表
- .把二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- 【Data structure & Algorithm】把二元查找树转变成排序的双向链表
- 1.二元查找树转变成排序的双向链表
- 微软面试题1.把二元查找树转变成排序的双向链表
- [算法] 把二元查找树转变成排序的双向链表
- To_10_r_100_0---把二元查找树转变成排序的双向链表
- 二元查找树转变成排序的双向链表
- 把二元查找树转变成排序的双向链表
- NO.1 把二元查找树转变成排序的双向链表
- 程序员面试题精选(01)-把二元查找树转变成排序的双向链表