二叉树为中序遍历递增序列。
解法一
递归
/*
// 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* treeToDoublyList(Node* root) {
if(root== nullptr) return nullptr;
dfs(root);
head->left = pre;
pre->right = head;
return head;
}
private:
Node *pre,*head;
void dfs(Node* cur){
if (cur==nullptr) return;
dfs(cur->left);
if( pre != nullptr) pre->right = cur;
else head= cur;
cur->left = pre;
pre = cur;
dfs(cur->right);
}
};
解法二
for 循环
class Solution {
public:
Node* treeToDoublyList(Node* root) {
if (root == nullptr) return nullptr;
vector<Node*> inorder1;
inorder(inorder1,root);
for (int i = 0; i < inorder1.size()-1; i++)
{
inorder1[i]->right = inorder1[i+1];
}
for (int j = inorder1.size()-1; j >=1; j--)
{
inorder1[j]->left= inorder1[j-1];
}
inorder1[inorder1.size()-1]->right = inorder1[0];
inorder1[0]->left =inorder1[inorder1.size()-1];
Node* head = inorder1[0];
return head;
}
void inorder(vector<Node*> &inorder1,Node* root){
if (root==nullptr) return;
inorder(inorder1,root->left);
inorder1.push_back(root);
inorder(inorder1,root->right);
}
};