[劍指offer] 26. 二叉搜尋樹與雙向連結串列
阿新 • • 發佈:2018-12-07
題目描述
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路:
利用中序遍歷的特性,從小到大遍歷二叉樹每一個結點。
修改中序遍歷,在在其中加入一個前驅結點
遍歷左子樹 前驅結點右指標指向當前結點 當前結點指向左指標指向前驅結點 前驅 = 當前 遍歷右子樹 此時遍歷結果pre指標指向的是連結串列尾,如果將上面的左右反過來,則直接返回pre即正確的答案。classSolution { public: TreeNode *preNode = NULL; TreeNode *Convert(TreeNode *curNode) { if (curNode == NULL) return NULL; Convert(curNode->right); if (preNode) { preNode->left = curNode; curNode->right = preNode; } preNode= curNode; Convert(curNode->left); return preNode; } };