将二叉搜索树转换成排序的双向链表
分析:
1. 二叉树的中序遍历正好是排好序的遍历方式,因此可以采用中序递归的方式来处理;
2. 可以用类似输出流的方式来”输出“节点到链表末尾;
3. 可以用局部变量来简化判断,优化程序。
程序:
typedef struct tagTreeNode_s
{
int nValue;
tagTreeNode_s* pLeftNode;
tagTreeNode_s* pRightNode;
} TreeNode_s;
void AppendNode(TreeNode_s* pNode, TreeNode_s*& pTailNode)
{
if (pNode == NULL)
return;
pTailNode->pRightNode = pNode;
pNode->pLeftNode = pTailNode;
pTailNode = pNode;
}
void AppendTree(TreeNode_s* pRootNode, TreeNode_s*& pTailNode)
{
if (pRootNode == NULL)
return;
AppendTree(pRootNode->pLeftNode, pTailNode);
AppendNode(pRootNode, pTailNode);
AppendTree(pRootNode->pRightNode, pTailNode);
}
TreeNode_s* ToLink(TreeNode_s* pRootNode)
{
TreeNode_s HeadNode;
TreeNode_s* pTailNode = &HeadNode;
pTailNode->pRightNode = NULL;
AppendTree(pRootNode, pTailNode);
pTailNode->pRightNode = NULL;
pTailNode = HeadNode->pRightNode;
if (pTailNode != NULL)
pTailNode->pLeftNode = NULL;
return pTailNode;
}
本文出自 “愚者” 博客,请务必保留此出处http://roboter.blog.51cto.com/10249123/1653009
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。