時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32M,其他語言64M 熱度指數:418309
題目描述
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。要求返回頭結點,且最好是雙向循環鏈表
解答思路:
中序線索二叉樹改造實現簡化類習題,牛客網題目不明確且測試數據有問題,這個從頭到尾用的leetcode。
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node() {}
Node(int _val) {
val = _val;
left = NULL;
right = NULL;
}
Node(int _val, Node* _left, Node* _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
class Solution {
Node*pre=NULL;
Node*first=NULL;
public:
Node* treeToDoublyList(Node* pRootOfTree)
{
if(pRootOfTree==NULL){
return NULL;
}
Convertdemo(pRootOfTree);
pre->right=first;
first->left=pre;
return first;
}
void Convertdemo(Node* pRootOfTree)
{
if(pRootOfTree==NULL){
return ;
}
Convertdemo(pRootOfTree->left);
pRootOfTree->left=pre;
if(pre!=NULL)pre->right=pRootOfTree;
else{
first=pRootOfTree;
}
pre=pRootOfTree;
Convertdemo(pRootOfTree->right);
}
};