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

二叉树专题

Leetcode 104. 二叉树的最大深度

class Solution {
public:int maxDepth(TreeNode* root) {if(!root)   return 0;int leftd = maxDepth(root -> left) + 1;int rightd= maxDepth(root -> right) + 1;return max(leftd, rightd);}
};

Leetcode 100. 相同的树

class Solution {
public:bool isSameTree(TreeNode* p, TreeNode* q) {if(p && q == nullptr || q && p == nullptr)  return false;if(p == nullptr && q == nullptr)            return true;if(p -> val != q -> val)    return false;bool left = isSameTree(p -> left, q -> left);bool right = isSameTree(p -> right, q ->right);return left && right;}
};

Leetcode 572. 另一棵树的子树

方法一:暴力匹配

上一题问题的延伸,主要注意下什么时候用isSubtree什么时候用isSametree就可以。

class Solution {
public:bool isSametree(TreeNode* a, TreeNode* b){if(a == nullptr && b || a && b == nullptr)  return false;if(a == nullptr && b == nullptr)            return true;if(a -> val != b -> val)                    return false;return isSametree(a -> left, b -> left) && isSametree(a -> right, b -> right);}bool isSubtree(TreeNode* root, TreeNode* subRoot) {if(root && subRoot == nullptr || root == nullptr && subRoot)    return false;if(root -> val != subRoot -> val)return isSubtree(root -> left, subRoot) || isSubtree(root -> right, subRoot);return isSametree(root, subRoot) || isSubtree(root -> left, subRoot) || isSubtree(root -> right, subRoot);}
};

方法二:只在高度相同时匹配

class Solution {
public:int getHeight(TreeNode* root){if(root == nullptr)     return 0;return max(getHeight(root -> left), getHeight(root -> right)) + 1; }bool isSametree(TreeNode* a, TreeNode* b){if(a == nullptr && b || a && b == nullptr)  return false;if(a == nullptr && b == nullptr)            return true;if(a -> val != b -> val)                    return false;return isSametree(a -> left, b -> left) && isSametree(a -> right, b -> right);}bool isSubtree(TreeNode* root, TreeNode* subRoot) { // 只在相同高度才进行比较int hs = getHeight(subRoot);function<pair<int, bool>(TreeNode*)>  dfs = [&](TreeNode* r)->pair<int, bool>{  // 返回pair类型<结点高度,是否与subRoot相同>if (nullptr == r)   return {0, false};    // 高度为0,不是相同子树auto [l_h, l_fg] = dfs(r -> left);auto [r_h, r_fg] = dfs(r -> right);if (l_fg || r_fg)   return {0, true};        // 至少一个存在即可int cur_h = max(l_h, r_h) + 1;return {cur_h, cur_h == hs && isSametree(r, subRoot)};  // 相等的时候再去比较}; return dfs(root).second;}
};

 

http://www.lryc.cn/news/414718.html

相关文章:

  • Spring MVC 之简介及常见注解
  • 除了使用本地存储,还有哪些方法可以实现只出现一次的弹窗?
  • 微软蓝屏事件揭示的网络安全深层问题与未来应对策略
  • C#:通用方法总结—第11集
  • Web开发-html篇-下
  • 【C++从小白到大牛】多态那些事儿(上)
  • 网站在线查询工具箱源码分享
  • SSH简写且免密登陆终端设备
  • 算力共享中神经网络切片和算力分配策略
  • 3章4节:R的逻辑运算和矩阵运算
  • 使用EasyAR打包安卓操作注意
  • 驾驭PyCharm:破解环境配置的迷宫
  • 大数据技术原理-Hadoop的安装
  • 从根儿上学习spring 八 之run方法启动第四段(2)
  • 牛顿插值法代替泰勒公式
  • 为 Laravel 提供生产模式下的容器化环境:打造现代开发环境的终极指南
  • Visual Studio 和 VSCode 哪个好?
  • 百款精选的HTML5小游戏源码,你可以下载并直接运行在你的小程序或者自己的网站上
  • 01 LVS负载均衡群集
  • Redis结合Lua脚本的简单使用
  • Java使用zip4j加密压缩和解压文件与文件夹
  • 一款好用的开源网站内容管理系统
  • Qt Modbus 寄存器读写实例
  • centos安装es、kibana、ik
  • 调试工具之GDB的基本使用
  • C++ //练习 16.14 编写Screen类模板,用非类型参数定义Screen的高和宽。
  • 【Java】深度解析监视器的组成原理
  • Day14-Servlet后端验证码的实现
  • MySQL:数据库权限与角色
  • 等保测评练习卷25