- Flatten Binary Tree to Linked List My Submissions QuestionEditorial Solution
Total Accepted: 81373 Total Submissions: 261933 Difficulty: Medium
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1
/
2 5
/
3 4 6
The flattened tree should look like:
1
2
3
4
5
6
思路:
用vector按照先序遍历的顺序把指针全部存下来,然后依次用右指针链接起来
时间复杂度:O(n)
空间复杂度:O(n)
/**
* 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:
void flatten(TreeNode* root) {
if(root==NULL)return;
stack<TreeNode*> stn; //用栈来进行先序遍历,注意这里不允许递归,除非另写函数
vector<TreeNode*> vtn;
stn.push(root);
while(!stn.empty()){
TreeNode *p = stn.top();
vtn.push_back(p);
stn.pop();
if(p->right!=NULL)stn.push(p->right);
if(p->left!=NULL)stn.push(p->left);
}
for(int i=0;i<vtn.size()-1;++i){
vtn[i]->right = vtn[i+1];
vtn[i]->left = NULL;
}
vtn[vtn.size()-1]->left = NULL;vtn[vtn.size()-1]->right = NULL;
}
};