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

每日算法题【二叉树】:二叉树的最大深度、翻转二叉树、平衡二叉树

(13)二叉树的最大深度
  • [104. 二叉树的最大深度 - 力扣(LeetCode)]:

  • 解题思路:

    递归思路:二叉树的最大深度等于左右子树中深度大的+1

    /*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*///二叉树的最大深度等于左右子树中深度大的+1
    int maxDepth(struct TreeNode* root) {if (root == NULL) {return 0;}//使用变量保存递归回来的结果进行比较int leftDepth = maxDepth(root->left);int rightDepth = maxDepth(root->right);return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;}
    

(14)翻转二叉树
  • [226. 翻转二叉树 - 力扣(LeetCode)]:
  • 解题思路:翻转每一课树的左右子树根节点
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
struct TreeNode* flipTree(struct TreeNode* root) {if (root == NULL) {return NULL;}// 交换左右子树struct TreeNode* temp = root->left;root->left = root->right;root->right = temp;// 递归翻转左右子树flipTree(root->left);flipTree(root->right);return root;
}

(15)判断一颗树是否是平衡二叉树
  • 110. 平衡二叉树 - 力扣(LeetCode)

  • 解题思路:

    要保证当前树的左右子树高度差不大于1,并且子树本身也是平衡树。

    1. maxDepth函数:递归计算二叉树的高度。
    2. isBalanced函数
      • 如果树为空,返回true
      • 计算左右子树的高度差
      • 如果高度差≤1且左右子树都是平衡的,返回true
      • 否则返回false
    /*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*///二叉树的最大深度等于左右子树中深度大的+1
    int maxDepth(struct TreeNode* root) {if (root == NULL) {return 0;}//使用变量保存递归回来的结果进行比较int leftDepth = maxDepth(root->left);int rightDepth = maxDepth(root->right);return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
    }//通过前序遍历二叉树的最大深度来进行判断
    bool isBalanced(struct TreeNode* root) {if(root == NULL){return true;}int leftDepth = maxDepth(root->left);int rightDepth = maxDepth(root->right);//首先要保证当前树的左右子树高度差不大于1,并且子树本身也是平衡树。if(abs(leftDepth - rightDepth)<=1 && isBalanced(root->left) && isBalanced(root->right)){return true;}return false;
    }
    
http://www.dtcms.com/a/358752.html

相关文章:

  • 【系统分析师】高分论文:论软件的系统测试及应用
  • 栈溢出问题
  • Redis-数据类型的常用操作命令
  • uart学习
  • Jdk动态代理 Cglib动态代理
  • MYSQL表结构优化场景
  • 解构机器学习:如何从零开始设计一个学习系统?
  • folium地图不显示加载不出来空白问题解决
  • SAP PP模块的MPS
  • 福彩双色球第2025100期篮球号码分析
  • git在push和clone等操作时显示‘: Invalid argument
  • 优选算法:二分查找
  • #5:Nginx核心使用技术
  • Java 学习笔记(基础篇12)
  • 小狼毫输入法中让数字键盘上的数字键不再选择候选词而是与原始输入一起直接上屏
  • 计算机视觉与深度学习 | 基于深度学习的图像特征提取与匹配算法综述及MATLAB实现
  • 互联网大厂大模型应用开发岗位面试:技术点详解与业务场景演练
  • nacos3端口漂移问题
  • shell编程-核心变量知识
  • LeetCode - 234. 回文链表
  • 2025年高性能计算年会
  • Golang 面试题「高级」
  • 零碳智慧园区双碳方案
  • 代理IP网站哪家好?全球优质IP代理服务商有什么推荐?
  • 【Linux】网络安全管理:Netfilter、nftables 与 Firewalld | Redhat
  • Linux查看Java进程PID、端口号和内存占用脚本
  • 2023年山东省信息学小学组(CSP-X)第一轮题解
  • 【嵌入式原理系列-第六篇】从Flash到RAM:MCU ld脚本全解析
  • SUMO 与 孪易 IOC 协同:开启交通数字孪生新纪元
  • 哪些人需要考道路运输安全员证?政策要求与适用范围