1.二叉树结构
//节点
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode* () : val(0), left(nullptr), right(nullptr) {}
TreeNode* (int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode* (int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};
//树
TreeNode* root;
2.二叉树遍历方式
- 先序遍历:中左右
- 中序遍历:左中右
- 后续遍历:左右中
- 层序遍历:从上到下,从左至右
代码实现:
先中后:递归,迭代【栈】
层序:迭代【队列】
前序遍历
中序遍历
后续遍历
层序遍历
3.二叉树的种类
满二叉树:节点个数不是0就是2。【国际定义】【国内某些教程:子节点个数全是2。】
完全二叉树:节点从上到下,从左到右填充。
平衡二叉树:任意及节点的高度相差不超过1。【AVL,红黑树】【判定方法,中序遍历+单调】
二叉搜索树: