基本思想:
中序遍历改前驱后继即可;
具体代码:
/*
// 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 {
public:
void inorder(Node* root,Node* &pre,Node* &head){
if(!root)
return;
inorder(root->left,pre,head);
if(!head)
head=root;
if(pre){
pre->right=root;
}
root->left=pre;
pre=root;
inorder(root->right,pre,head);
}
Node* treeToDoublyList(Node* root) {
if(!root)
return nullptr;
Node* head=nullptr;
Node* pre=nullptr;
inorder(root,pre,head);
Node* p=head;
while(p->right)
p=p->right;
p->right=head;
head->left=p;
return head;
}
};