参考了大佬的力扣题解:剑指 Offer 36. 二叉搜索树与双向链表(中序遍历,清晰图解)
递归:(1)递归终止条件;(2)递归操作。
这里二叉搜索树采用中序遍历,操作在遍历左子树和右子树中间。
/*
// 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:
//肯定用到中序遍历
Node *head,*pre;
void dfs(Node *cur){
if(!cur) return;
dfs(cur->left);
if(pre) pre->right=cur;
else head=cur;
cur->left=pre;
pre=cur;
dfs(cur->right);
}
Node* treeToDoublyList(Node* root) {
if(!root) return NULL;
dfs(root);
head->left=pre;
pre->right=head;
return head;
}
};