day17 代码回想录 二叉树04 平衡二叉树二叉树的所有路径左叶子之和

news/2024/7/7 22:26:30

大纲

● 110.平衡二叉树
● 257. 二叉树的所有路径
● 404.左叶子之和

平衡二叉树

题目链接:110.平衡二叉树
分析过程:
本题的解题思路是求最大深度和最短路径元素个数后,判断两者差是否小于1

// 二叉树是否平衡
void minMaxDepth(TreeNode* root, int count, int& min, int& max) {
    if (!root) {
        if (min > count) min = count;
        if (max < count) max = count;
        return;
    }

    count++;
    minMaxDepth(root->left, count, min, max);
    minMaxDepth(root->right, count, min, max);
    count--;
}


bool isBalanceTree(TreeNode* root)
{
    int min = INT_MAX;
    int max = INT_MIN;
    minMaxDepth(root, 0, min, max);

    if (max - min > 1) {
        return false;
    }
    return true;
}

二叉树的所有路径

题目链接: 257. 二叉树的所有路径
分析过程:
给定一个二叉树,返回所有从根节点到叶子节点的路径


// 所有的叶子节点
// 叶子节点:左右都为空的节点
// 使用回溯+递归法
// 递归参数:root [路径list] 返回值list
// 结束条件:root左右都为空
void getTreePath(TreeNode* root, vector<TreeNode*>& prePath, vector<string>& ret)
{
    // 节点为空结束
    if (!root) return;

    if (!root->left && !root->right) {
        string str;

        for (int i = 0; i < prePath.size(); ++i) {
            str.append(std::to_string(prePath[i]->val));
            str.append("->");
        }
        str.append(std::to_string(root->val));

        ret.push_back(str);
        return;
    }

    prePath.push_back(root);
    getTreePath(root->left, prePath, ret);
    getTreePath(root->right, prePath, ret);
    prePath.pop_back();
}

vector<string> getAllTreePath(TreeNode* root)
{
    vector<string> ret;

    if (!root) return ret;
    vector<TreeNode*> path;
    getTreePath(root, path, ret);

    return ret;
}

遇到问题:
1 忘记怎么把int 转string
2 忘记vector删除最后元素接口
3 没有想清楚递归结束条件,如果是root空怎么办,未处理

左叶子之和

题目链接:404.左叶子之和

// 左叶子之和
// 需要前一个节点 + 当前节点 如果当前节点的左右节点空 且 pre->left = cur
// 递归结束条件:root空 或者 是叶子节点
// 递归参数:root preNode, sum
void leftNodeSum(TreeNode* root, TreeNode* preNode, int& sum) {
    if (!root) return;
    // 是叶子节点
    if (preNode
            && !root->left
            && !root->right
            && preNode->left == root) {
        sum += root->val;
        return;
    }
    preNode = root;
    leftNodeSum(root->left, preNode, sum);
    leftNodeSum(root->right, preNode, sum);
}

int getLeftNodesSum(TreeNode* root) {
    int sum = 0;
    TreeNode* preNode = nullptr;
    leftNodeSum(root, preNode, sum);
    return sum;
}

http://lihuaxi.xjx100.cn/news/1490260.html

相关文章

【MySQL】3、MySQL的索引、事务、存储引擎

create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统&#xff0c;能够更快速的查询信…

官方项目《内容示例》中Common UI部分笔记: 1.1 Activatable Widgets

本文主要面向UMG以及Common UI的初学者 文章目录 效果展示概要Activate和Deactivate可见性绑定UI动画设置Common Activatable Widget的默认焦点 效果展示 概要 这个例子非常简单&#xff0c;定义了13个Common Activatable Widget CommonUI_ActivatableWidgets相当于一个容器包…

Web弹性布局

/*弹性盒子 弹性布局 */ /* 默认从左到右 */ display: flex; /* 从右到左 */ /* flex-direction: row-reverse; */ /* 从上到下 */ /* flex-direction: column; */ …

Stone Prover:StarkWare的STARK Prover

1. 引言 StarkWare将基于Apache 2.0 license&#xff0c;开源其以C编写的STARK Prover&#xff0c;名为Stone&#xff08;STARK one&#xff09;。 其基本流程为&#xff1a; 1&#xff09;编写Cairo0程序。2&#xff09;使用Cairo工具 将Cairo0程序编译为CASM。3&#xff…

计算机网络安全的背景

虽然传统的计算机发展和当今的电子商务不同&#xff0c;但是不可否认网络已经成 为非常重要的信息和数据互换交换的平台。但是随着网络不断发展渗透到人们的日 常生活、手机终端、交易支付等环节时&#xff0c;网络安全已经成为一个焦点和不可逾越的 发展鸿沟。尽管目前网上…

【嘉立创EDA】焊接辅助图纸制作

文章路标👉 文章解决问题主题内容拙见与拓展文章解决问题 1️⃣ 嘉立创EDA专业版在较新的版本中(如版本 : V2.1.17)中支持了焊接辅助工具功能,在这个功能中,包含了位号与PCB的对应索引(分位号聚合排序与不聚合排序两种序列方法),可以索引到对应的3D仿真图,或者简图(…

为什么这3类人,一定要选择无代码开发?

一个人也能开发出一个软件&#xff1f;这或许难以想象的&#xff0c;但无代码技术的问世&#xff0c;让这一切都成为现实。 可能很多人对“无代码”还是不太熟悉&#xff0c;但大家一定都听说过“码农”这个词&#xff0c;而无代码开发技术的出现&#xff0c;可以让我们摆脱这…

Python Flask token身份认证

首先安装依赖&#xff1a; pip install flask-jwt-extended 然后在主应用中&#xff08;项目入口文件&#xff09;加入以下代码&#xff1a; from flask import Flask from flask_jwt_extended import JWTManager #引入依赖 app Flask(__name__) app.config[JWT_SECRET_KEY…