二叉树基本分类
二叉树大概分为:
- 完全二叉树:除了最后一层外,其他每一层都被填满,且最后一层的节点从左到右连续地填入
- 满二叉树:除最后一层无任何子节点,每层的所有结点都有两个子结点
- 二叉搜索树/二叉排序树:每个节点的值大于左子树中所有节点的值,且小于右子树中所有节点的值
- 平衡二叉树:任意节点的左子树和右子树的高度差不超过1 如AVL树
- 多路搜素树:允许每个节点有多个子节点,用于高效地处理大量数据,如B树、B+树
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
// 单向链表
struct ListNode{
int val;
ListNode* next;
ListNode(int x): val(x), next(nullptr){}
ListNode(int x, ListNode* next): val(x), next(next){}
};
// 二叉树的基本结构,在其基础上加条件会衍生各种类型的二叉树
struct TreeNode{
int val;
TreeNode *left, *right;
TreeNode(int x, TreeNode* left, TreeNode*right): val(x), left(left), right(right){}
};
// 红黑树/自平衡二叉搜索树,既是平衡二叉树 也是二叉搜索树
struct RBTreeNode{
int val;
bool isBlack;
RBTreeNode *left, *right, *parent;
RBTreeNode(int x): val(x), isBlack(true), left(nullptr), right(nullptr), parent(nullptr){}
};
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.