所有代码均通过G++编译器测试,仅为练手纪录。
//面试题27:二叉搜索树与双向链表
//题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
// 要求不能创建任何新的结点,只能调整树中结点指针的方向。
//面试题27:二叉搜索树与双向链表
//题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
// 要求不能创建任何新的结点,只能调整树中结点指针的方向。
void ConvertTreeToListImpl(BinTreeNode *pNode,BinTreeNode **pLastNode)
{
if(NULL == pNode)
{
return;
}
BinTreeNode *pCurNode = pNode;
if(NULL != pCurNode->m_pLeft)
{
ConvertTreeToListImpl(pCurNode->m_pLeft,pLastNode);
}
pCurNode->m_pLeft = *pLastNode;
if(NULL != *pLastNode)
{
(*pLastNode)->m_pRight = pCurNode;
}
*pLastNode = pCurNode;
if(NULL != pCurNode->m_pRight)
{
ConvertTreeToListImpl(pCurNode->m_pRight, pLastNode);
}
}
BinTreeNode * ConvertTreeToList(BinTreeNode *pRoot)
{
BinTreeNode *pLastNode = NULL;
ConvertTreeToListImpl(pRoot, &pLastNode);
BinTreeNode *pHead = pLastNode;
while(NULL != pHead && NULL != pHead->m_pLeft)
{
pHead = pHead->m_pLeft;
}
return pHead;
}
ZhaiPillary
2017-01-07