在本教程中,您将了解平衡的二叉树及其不同类型。此外,您还将在C中找到平衡二叉树的示例。
平衡二叉树,也称为高度平衡二叉树,是指任意节点左右子树的高度相差不超过1的二叉树。
以下是高度平衡二叉树的条件:
- 任何节点的左子树和右子树之间的差异不超过一个
- 左子树是平衡的
- 右子树是平衡的
C示例
// Checking if a binary tree is height balanced in C
#include <stdio.h>
#include <stdlib.h>
#define bool int
// Node creation
struct node {
int item;
struct node *left;
struct node *right;
};
// Create a new node
struct node *newNode(int item) {
struct node *node = (struct node *)malloc(sizeof(struct node));
node->item = item;
node->left = NULL;
node->right = NULL;
return (node);
}
// Check for height balance
bool checkHeightBalance(struct node *root, int *height) {
// Check for emptiness
int leftHeight = 0, rightHeight = 0;
int l = 0, r = 0;
if (root == NULL) {
*height = 0;
return 1;
}
l = checkHeightBalance(root->left, &leftHeight);
r = checkHeightBalance(root->right, &rightHeight);
*height = (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
if ((leftHeight - rightHeight >= 2) || (rightHeight - leftHeight >= 2))
return 0;
else
return l && r;
}
int main() {
int height = 0;
struct node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
if (checkHeightBalance(root, &height))
printf("The tree is balanced");
else
printf("The tree is not balanced");
}
平衡二叉树的应用
- AVL树
- 平衡二叉搜索树
参考文档
[1]Parewa Labs Pvt. Ltd.Balanced Binary Tree[EB/OL].https://www.programiz.com/dsa/balanced-binary-tree,2020-01-01.