114 Flatten Binary Tree to Linked List 原題鏈接
遞歸dfs搜索思想
= = 題意是要就地開花,改那麼一下,我個憨憨自己搞出了個新樹,看了題解才知道,害。
舊版代碼 (沒過)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* tmp = nullptr;
public:
void flatten(TreeNode* root) {
if(!root) return;
tmp = new TreeNode(root->val);
TreeNode* head = nullptr;
head = tmp;
dfs(root);
delete(root);
root = head;
/*
cout<<root->val;
while(root->right){
cout<<root->right->val<<endl;
root = root->right;
}
*/
}
void dfs(TreeNode* root){
if(root->left){
tmp->right = new TreeNode(root->left->val);
tmp = tmp->right;
// cout<<tmp->val<<endl;
dfs(root->left);
}
if(root->right){
tmp->right = new TreeNode(root->right->val);
tmp = tmp->right;
//cout<<tmp->val<<endl;
dfs(root->right);
}
}
};
船新版本
class Solution {
public:
void flatten(TreeNode* root) {
if(!root) return;
vector<TreeNode*> node;
dfs(root,node);
for(int i=0;i<node.size()-1;i++){
node[i]->left=NULL;
node[i]->right=node[i+1];
}
}
void dfs(TreeNode* root, vector<TreeNode*> &node){
if(!root){
return;
}
node.push_back(root);
dfs(root->left,node);
dfs(root->right,node);
}
};