首页 > 其他 > 详细

题目27:二叉搜索树与双向链表

时间:2015-07-09 17:37:05      阅读:99      评论:0      收藏:0      [点我收藏+]

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点的方向。如下图所示:

技术分享

二叉树的结点定义如下:

1 struct BinaryTreeNode
2 {
3     int m_nValue;
4     BinaryTreeNode* m_pLeft;
5     BinaryTreeNode* m_pRight; 
6 };
 1 BinaryTreeNode* convert(BinaryTreeNode* pRootOfTree)
 2 {
 3   //pLastNodeList指向已经转换好的链表的最后一个结点
 4   BianryTreeNode* pLastNodeInList = NULL;
 5   convertNode(pRootOfTree, &pLastNodeInList);
 6   //pLastNodeInList指向双向链表的尾结点,需要找到头结点
 7   BianryTreeNode* pHeadOfList = pLastNodeInList;
 8   while (pHeadOfList != NULL && pHeadOfList->m_pLeft != NULL)
 9     pHeadOfList = pHeadOfList->m_pLeft;
10   return pHeadOfList;
11 }
12 
13 void convertNode(BinaryTreeNode* pNode, BinaryTreeNode** pLastNodeList)
14 {
15   if (pNode == NULL)
16     return;
17   BinaryTreeNode* pCurrent = pNode;
18   if (pCurrent->m_pLeft != NULL)
19     convertNode(pCurrent->m_pLeft, pLastNodeList);
20   pCurrent->m_pLeft = *pLastNodeInList;
21   if (*pLastNodeInList != NULL)
22     (*pLastNodeInList)->m_pRight = pCurrent;
23   *pLastNodeInList = pCurrent;
24   if (pCurrent->m_pRight!=NULL)
25     convertNode(pCurrent->m_pRight, pLastNodeList);
26 }

 

题目27:二叉搜索树与双向链表

原文:http://www.cnblogs.com/happygirl-zjj/p/4633516.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!