1. 程式人生 > >[劍指offer] 26. 二叉搜尋樹與雙向連結串列

[劍指offer] 26. 二叉搜尋樹與雙向連結串列

題目描述

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
思路:

利用中序遍歷的特性,從小到大遍歷二叉樹每一個結點。

修改中序遍歷,在在其中加入一個前驅結點

遍歷左子樹 前驅結點右指標指向當前結點 當前結點指向左指標指向前驅結點 前驅 = 當前 遍歷右子樹   此時遍歷結果pre指標指向的是連結串列尾,如果將上面的左右反過來,則直接返回pre即正確的答案。
class
Solution { 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; } };