首页 > 其他分享 >一道平衡二叉树的求解

一道平衡二叉树的求解

时间:2024-03-23 14:58:07浏览次数:22  
标签:遍历 TreeNode 求解 int 一道 二叉树 return root

最近在看二叉树的算法,我觉得有点迷迷糊糊,就是那种一看就会,一写就费。我有点很奇怪的感觉,就感觉二叉树的很多问题,其实在于一步一步的遍历(或者称为迭代,或者是递归方法),然后在遍历的基础上进行逻辑(业务)操作。

首先在这讲一下递归。

递归有三部曲:

一. 确定函数参数,确定函数的返回值类型。

二. 确定终止条件

三.确定单层遍历的逻辑

下面,我们以平衡二叉树的算法进行在明确。

给定一个二叉树,判断它是否是 平衡二叉树

 

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

算法解析:二叉树就是在递归(遍历)的基础上进行业务操作。

一:确定函数参数,确定函数的返回值类型。

 int getDepth(TreeNode* root);

二. 确定终止条件

if (root == nullptr) return 0;

当遇到这个说明节点已经被遍历完了,可以返回0了;

三.确定单层遍历的逻辑

还记得二叉树就是在递归(遍历)的基础上进行业务操作,重要的事情讲三遍!!

遍历类型有:前序,中序,后序,层次。具体的遍历顺序看具体的场景。

        int leftHeight = getDepth(root->left);   // 左

        if (leftHeight == -1) return -1;

       

        int rightHeight = getDepth(root->right); //右

        if (rightHeight == -1) return -1;

       

        if (abs(leftHeight - rightHeight) > 1) return -1;  //  中

       

        return 1 + max(leftHeight, rightHeight);

三部曲已经完成!下面是具体的过程:
 

#include <iostream>
#include <algorithm>

using namespace std;

// Definition for a binary tree node.
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
    int getDepth(TreeNode* root) {
        if (root == nullptr) return 0;
        
        int leftHeight = getDepth(root->left);
        if (leftHeight == -1) return -1;
        
        int rightHeight = getDepth(root->right);
        if (rightHeight == -1) return -1;
        
        if (abs(leftHeight - rightHeight) > 1) return -1;
        
        return 1 + max(leftHeight, rightHeight);
    }
    
    bool isBalanced(TreeNode* root) {
        return getDepth(root) != -1;
    }
};

int main() {
    // Usage example
    Solution solution;
    TreeNode* root = new TreeNode(1);
    root->left = new TreeNode(2);
    root->right = new TreeNode(3);
    root->left->left = new TreeNode(4);
    root->left->right = new TreeNode(5);
    root->right->right = new TreeNode(6);

    cout << (solution.isBalanced(root) ? "Balanced" : "Not Balanced") << endl;

    return 0;
}
 

标签:遍历,TreeNode,求解,int,一道,二叉树,return,root
From: https://blog.csdn.net/qq_43583172/article/details/136938097

相关文章

  • 一元二次方程ax2+bx+c=0,a、b、c的值由用户在三行中输入,根据用户输入的数值求解方程的
    输入格式输入三行数据每行输入一个实数输出格式方程的解示例1输入:852输出:该方程无实数解示例2输入:009输出:Dataerror!a=float(input())b=float(input())c=float(input())delta=b**2-4*a*c#德塔ifdelta<0:print("该方程无实数解")#ab==0elif......
  • 二维数组不同行不同列的累加最值求解
    //E:给定n为A,B整型数组的长度,将a中所有元素与b中所有元素相乘进行累和(各数组//元素不可重复使用),求其最小值。//例://输入:5//18-14-2//061-4-1//输出:-4上面为原始题目:思路为用A和B数组所有元素依次相乘后的所有结果做一个二维数组,然后通过实现二维......
  • DFS求解连通块问题
    DFS求解连通块问题#include<bits/stdc++.h>usingnamespacestd;charg[35][65];intvis[35][65],num,res;intdx[]={0,1,0,-1},dy[]={1,0,-1,0};voiddfs(intx,inty){if(x<1||x>30||y<1||y>60||g[x][y]=='0'||vis[x][y])return;vis[x][......
  • 递归法求解最大连续子序列和MaxSubSum
    何为递归呢总结一句话就是:向基准情形不断推进核心就在于“递”和“归”递:不断推进归:向基准情形结合今天的例子进一步解释如下:分而治之的思想divideandconquer分三步:“分”“治”“合并”“分”:将子序列看作三种,左半部分右半部分跨越中间元素的子序列“治”......
  • 【VRP问题】基于粒子群算法求解带时间窗的路径最短多车辆多任务车辆路径规划CTWVRP问
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 最大化运输问题求解——Python实现
    运输问题(TransportationProblem)是运筹学中的经典问题,通常涉及将资源从供应点转移到需求点,以最小化运输成本或满足需求。这个问题在各种实际场景中都有广泛的应用,包括但不限于以下几个方面:供应链管理:在供应链中,最小化运输问题可用于确定最有效的货物运输方式,以满足各个节点之间的......
  • 二叉树的创建,遍历与销毁
    二叉树的创建,遍历与销毁#include<iostream>#include<bits/stdc++.h>usingnamespacestd;structTreeNode{ charval;//数据域 TreeNode*lchild;//左子树 TreeNode*rchild;//右子树};classBiTree{ private: TreeNode*root;//根节点 public: BiTree()......
  • 2023年华数杯国际大学生数学建模竞赛B题社会稳定预警研究求解全过程文档及程序
    2023年华数杯国际大学生数学建模竞赛B题社会稳定预警研究原题再现  人类和所有动物一样,都有趋利避害的本能。人类成为造物之主的关键是,他们比其他动物更善于避免伤害。危机总是潜伏在未来。人类发展史是一部不断超越危机的历史(严耀军,2003)。“居安思危”,衡量和警示社会......
  • 代码随想录算法训练营第十七天| 110. 平衡二叉树 257. 二叉树的所有路径 404. 左叶
    110.平衡二叉树https://leetcode.cn/problems/balanced-binary-tree/description/publicbooleanisBalanced(TreeNoderoot){intbalance=balance(root);returnbalance==-1?false:true;}publicintbalance(TreeNodenode){i......
  • 二叉树详解
    二叉树详解一:什么是树1:概念2:树的特点##3:树的一些重要概念二:二叉树1:二叉树的概念2:二叉树的特点3:特殊的二叉树:三:二叉树的性质四:二叉树的存储一:什么是树1:概念树是一种非线性的数据结构,它是由n个节点组成的一个具有层次关系的集合,把它叫做树的原因是因......