54. Flatten Binary Tree to Linked List

  1. 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;
    }
};
原文地址:https://www.cnblogs.com/freeopen/p/5482909.html