判断二叉树是否是平衡二叉树

这篇博客介绍如何根据前序和中序遍历创建二叉树,并通过递归算法判断是否为平衡二叉树。思路是计算每个节点的左右子树高度,若高度差不超过1,则递归检查子树是否平衡。
摘要由CSDN通过智能技术生成
  • 前言
    本次首先是输入前序+ 中序遍历,创建一个二叉树,然后再判断其是否是平衡二叉树。如果创建,本贴不会讲,有意向的可以参考以下帖子:

https://blog.csdn.net/qq_39763472/article/details/106976494

  • 思路:
    首先考虑到平衡二叉树的定义:对于每一个节点,它的左子树和右子树的高度之差不超过1。可以看出,是递归定义的,所以我们通过递归程序,先计算左子树高度,再计算右子树高度,如果相差小于1,则递归判断 左右子树 都是不是平衡二叉树。
  • 代码
    1、两个函数,一个函数是通过dfs计算树高,另一个是判断是否是平衡二叉树
#include "bits/stdc++.h"
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
typedef long long ll;
const int maxn = 1e4 + 7;
const int INF = INT_MAX;
const int EPS = 10;
#define _DEBUG

typedef struct Node* List;
typedef struct Node{
   
    List l, r;
    int data;
};

int n, h;
vector<int> preorder(9), inorder(9);
List root = new Node();
unordered_map<int, int> mp;
bool ans = false;

void init(){
   
    mp.clear();
    cin>>n;
    for(int i = 0;i < n;i++){
   
        cin>>preorder[i];
    }
    for (int i = 0; i < n; i++) {
   
        cin>>inorder[i];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值