【牛客】二叉搜尋樹與雙向連結串列
阿新 • • 發佈:2019-01-30
題目描述:
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
思路:
1、樹為空,直接返回
2、樹只有一個節點,將其根節點返回
3、定義一個指標pre指向訪問過的節點,然後使用遞迴的思想實現
4.遞迴左子樹,找到最左邊節點
5.將當前節點的左指標指向pre,如果pre不為空,將pre的右指標指向當前節點
6.遞迴右子樹
7、定義一個頭指標,然後將其指向新連結串列的頭部,返回。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void ConvertSub(TreeNode* pCur,TreeNode*& pre)
{
if(pCur==NULL)
return;
//找最左邊節點
if(pCur->left)
ConvertSub(pCur->left,pre);
pCur->left=pre;//left
//改變指標指向
if(pre!=NULL)
pre-> right=pCur;//right
pre=pCur;
//處理右子樹
if(pCur->right)
ConvertSub(pCur->right,pre);
}
TreeNode* Convert(TreeNode* pRootOfTree){
if(pRootOfTree==NULL)
return NULL;
if(pRootOfTree->left==NULL&&pRootOfTree->right==NULL )
return pRootOfTree;
TreeNode* pre=NULL;
TreeNode* head=NULL;
ConvertSub(pRootOfTree,pre);
head=pre;
while(head->left)
head=head->left;
return head;
}
};