二叉樹--將二叉搜尋樹轉換成一個排序的雙向連結串列
阿新 • • 發佈:2019-01-03
思路:
二叉搜尋樹本來就是已經排好序的,左比根小右比根大。
所以我們將左子樹的最右的節點與根相連並且將根與右子樹中最左邊的結點相連線。
之後對子樹進行遞迴操作。
void ConvertNode(BinaryTreeNode* pNode,BinaryTreeNode** pLastNodeInList)
{
if(pNode == NULL)
return ;
BinaryTreeNode* pCur = pNode;
//構建左子樹雙向連結串列
if(pCur -> left != NULL)
ConvertNode(pCur -> left,pLastNodeInList);
//根與左右相連線
pCur -> left = *pLastNodeInList;
if(*pLastNodeInList != NULL)
(*pLastNodeInList) -> right = pCur;
//構建右子樹雙向連結串列
*pLastNodeInList = pCur;
if(pCur -> right != NULL)
ConvertNode(pCur -> right,pLastNodeInList);
}
//pLastNodeInList指向連結串列的尾,最後將它返回頭處。
BinaryTreeNode* Convert(BinaryTreeNode* pRoot)
{
BinaryTreeNode* pLastNodeInList = NULL;
ConvertNode(pRoot,&pLastNodeInList);
BinaryTreeNode* pHeadOfList = pLastNodeInList;
while(pHeadOfList != NULL && pHeadOfList -> left != NULL)
pHeadOfList = pHeadOfList -> left;
return pHeadOfList;
}