栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【ACWing】49. 二叉搜索树与双向链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【ACWing】49. 二叉搜索树与双向链表

题目地址:

https://www.acwing.com/problem/content/description/87/

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
注意:
需要返回双向链表最左侧的节点。

数据范围:
树中节点数量 [ 0 , 500 ] [0,500] [0,500]。

直接中序遍历一遍即可。代码如下:

#include 
using namespace std;

struct TreeNode {
  int val;
  TreeNode *left, *right;
  TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
  TreeNode* convert(TreeNode* root) {
    stack stk;
    auto dummy = new TreeNode(0), prev = dummy;
    while (stk.size() || root) {
      while (root) {
        stk.push(root);
        root = root->left;
      }

      root = stk.top(); stk.pop();
      prev->right = root;
      root->left = prev;
      prev = prev->right;

      root = root->right;
    }

    root = dummy->right;
    // 把dummy和最终答案断开
    dummy->right = nullptr;
    if (root) root->left = nullptr;
    return root;
  }
};

时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926102.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号