leecode第一百一十四题(二叉树展开为链表)

/**
 * 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)//记住!root可能为[]
            return;

        stack<TreeNode*> temp;
        TreeNode* first=root;//记住上一个节点
        if(root->right!=NULL)
            temp.push(root->right);
        if(root->left!=NULL)
            temp.push(root->left);

        while(!temp.empty())
        {
            TreeNode* node=temp.top();//前序遍历
            temp.pop();
            if(node->right!=NULL)
                temp.push(node->right);
            if(node->left!=NULL)
                temp.push(node->left);

            first->right=node;//同时原地记录顺序
            first->left=NULL;
            first=node;
        }
    }
};

分析:

思路很简单,就是前序遍历里加一点东西就好。

原文地址:https://www.cnblogs.com/CJT-blog/p/11223295.html

时间: 2024-07-30 22:58:11

leecode第一百一十四题(二叉树展开为链表)的相关文章

【leetcode 简单】 第一百一十二题 重复的子字符串

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成. 示例 2: 输入: "aba" 输出: False 示例 3: 输入: "abcabcabcabc" 输出: True 解释: 可由子字符串 "abc" 重复四次构成. (或者子字符串

leecode第一百四十二题(环形链表II)

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *detectCycle(ListNode *head) { if(head==NULL) return NULL; ListNode *fast_no

第一百一十四节,JavaScript文档对象,DOM进阶

JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容

leecode第一百四十六题(LRU缓存机制)

class LRUCache { private: unordered_map<int, list<pair<int,int>>::iterator> _m; // 新节点或刚访问的节点插入表头,因为表头指针可以通过 begin 很方便的获取到. list<pair<int,int>> _list; int _cap; public: LRUCache(int capacity) : _cap(capacity) {} // O(1) // ha

leecode第六十四题(最小路径和)

class Solution { public: int minPathSum(vector<vector<int>>& grid) { int m = grid.size(); if (m == 0) return 0; int n = grid[0].size(); if (n == 0) return 0; vector<int> path(n,0); for(int i=m-1;i>=0;i--) { for(int j=n-1;j>=0;j

code第一部分:数组 第十四题 雨水问题

code第一部分:数组 第十四题 雨水问题 Given n non-negative integers representing an elevation map where the width of each bar is 1, computehow much water it is able to trap after raining.For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. 分析: 解决方案1 对于每个柱子,找到其左右两

数据结构(十四)——二叉树

数据结构(十四)--二叉树 一.二叉树简介 1.二叉树简介 二叉树是由n(n>=0)个结点组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的.互不相交的二叉树组成.二叉树的五种形态: 2.二叉树的存储结构模型 树的另一种表示法:孩子兄弟表示法A.每个结点都有一个指向其第一个孩子的指针B.每个结点都有一个指向其第一个右兄弟的指针孩子兄弟表示法的特性:A.能够表示任意的树形结构B.每个结点包含一个数据成员和两个指针成员C.孩子结点指针和兄弟结点指针构成树杈 3.满二叉树

经典算法题每日演练——第二十四题 梳排序

原文:经典算法题每日演练--第二十四题 梳排序 这篇再看看一个经典的排序,梳排序,为什么取名为梳,可能每个梳都有自己的gap吧,大梳子gap大一点,小梳子gap小一点. 上一篇我们看到鸡尾酒排序是在冒泡排序上做了一些优化,将单向的比较变成了双向,同样这里的梳排序也是在冒泡排序上做了一些优化. 冒泡排序上我们的选择是相邻的两个数做比较,就是他们的gap为1,其实梳排序提出了不同的观点,如果将这里的gap设置为一定的大小, 效率反而必gap=1要高效的多. 下面我们看看具体思想,梳排序有这样一个1.

网络流二十四题

网络流二十四题 网络流是个好东西,希望我也会. 网络流?\(orz\ zsy!!!!!\) P2766 最长不下降子序列问题 考虑我们是如何\(dp\)这个\(LIS\)的. 我们是倒着推,设置\(dp(i)\)代表以\(i\)为起点的\(LIS\)是多少.转移太显然了 \[ dp(i)=max\{dp(j)\}+1,data[i]\le data[j] \] 想一想一个合法的\(LIS\)方案代表着什么,代表着它是由这个式子一个一个推出来的. 考虑一个数字只能用一次,那么我们直接拆成两个点\(