- 前言
本次首先是输入前序+ 中序遍历,创建一个二叉树,然后再判断其是否是平衡二叉树。如果创建,本贴不会讲,有意向的可以参考以下帖子:
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];