当前位置: 首页 > article >正文

代码随想录算法训练营第十七天-二叉树-654.最大二叉树

  • 凡是构造二叉树类题目,都要用前序遍历
  • 再次强调,完成二叉树的问题,主要就是遍历顺序密切相关,但也不绝对,应该是第一要务
// d17-leetcode-binarytree-constructmaximumbinarytree.cpp
#include <iostream>
#include <vector>
#include <sstream>
#include <climits>

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(): val(0), left(nullptr), right(nullptr) {}
    TreeNode(int v): val(v), left(nullptr), right(nullptr) {}
    TreeNode(int v, TreeNode* l, TreeNode* r): val(v), left(l), right(r) {}
};

class Solution {
private:
    TreeNode* traversal(std::vector<int>& nums, int left, int right) {
        if (left >= right)
            return nullptr;
        int maxIndex = left;
        for (int i = left + 1; i < right; ++i) {
            if (nums.at(i) > nums.at(maxIndex))
                maxIndex = i;
        }
        TreeNode* node = new TreeNode(nums.at(maxIndex));
        node->left = traversal(nums, left, maxIndex);
        node->right = traversal(nums, maxIndex + 1, right);
        return node;
    }
public:
    TreeNode* constructMaximumBinaryTree(std::vector<int>& nums) {
        return traversal(nums, 0, nums.size());
    }
};

std::vector<int> vec;
void getNums() {
    std::string str;
    getline(std::cin, str);
    std::stringstream ss {str};
    int v;
    while(ss >> v)
        vec.push_back(v);
}
void showTree(TreeNode* node) {
    if (node == nullptr)
        return;
    std::cout << node->val << " ";
    showTree(node->left);
    showTree(node->right);
}

int main()
{
    getNums();
    Solution s;
    TreeNode* ptn = s.constructMaximumBinaryTree(vec);
    showTree(ptn);
    std::cout << std::endl;

    return 0;
}
  • 汇总

http://www.kler.cn/a/463673.html

相关文章:

  • df.groupby()方法使用表达式分组
  • 基于深度学习算法的AI图像视觉检测
  • 如何使用axios实现并发请求
  • 【pytorch-lightning】架构一览
  • Ubuntu Server安装谷歌浏览器
  • 2024年大型语言模型(LLMs)的发展回顾
  • STM32-笔记19-串口打印功能
  • arm rk3588 升级glibc2.31到2.33
  • AIGC与未来的通用人工智能(AGI):从生成内容到智能革命
  • 华为云Welink数据怎么连接到小满CRM?
  • gesp(C++一级)(12)洛谷:B3953:[GESP202403 一级] 找因数
  • 电脑与手机
  • GPT分区 使用parted标准分区划分,以及相邻分区扩容
  • 苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用
  • 条款35:考虑虚函数以外的其它选择(Consider alternatives to virtual functions)
  • 元宇宙金融新纪元:CZ协议全球启航
  • ctrip 小试牛刀记录
  • 分布式系统架构6:链路追踪
  • 基于SpringBoot的题库管理系统的设计与实现(源码+SQL+LW+部署讲解)
  • ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础
  • MySQL 分库分表
  • 对称密码算法(分组密码算法 序列密码算法 密码杂凑算法)中的基本操作
  • 28.Marshal.PtrToStringAnsi C#例子
  • spring网关维度
  • 玩转OCR | 腾讯云智能结构化OCR初次体验
  • vscode 多项目冲突:进行 vscode 工作区配置