zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    iou与giou对比
    Linux学习第一天 vim
    奖励加分申请
    人月神话阅读笔记3
    5.27
    5.26
    5.25
    5.23
    5.22
    5.21
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482909.html
Copyright © 2011-2022 走看看