劍指offer題解(二叉樹與雙向連結串列)
題目描述
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
解題思路
中序遍歷搜尋二叉樹,用pre儲存中序遍歷的前一個節點,cur為當前節點,然後使pre->right=cur,cur->left=pre;
(注意pre要宣告為常指標,初始時pre為空),最後從根節點向左遍歷,找到頭指標。
程式碼
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree==nullptr)
return nullptr;
TreeNode *pre=nullptr;
midV(pRootOfTree,pre);
TreeNode *res=pRootOfTree;
while(res->left)
{
res=res->left;
}
return res;
}
void midV(TreeNode *cur,TreeNode *& pre)
{
if(cur==nullptr)
return;
midV(cur->left,pre);
cur->left=pre;
if(pre) pre->right=cur;
pre=cur;
midV(cur->right,pre);
}
};