二叉树(代码待补)
二叉树的种类
- 满二叉树:只有度为0和度为2的节点
- 完全二叉树:除了最底层叶子结点可能没有填满,上面各层都填满了;并且最底层的叶子结点都集中在左边
- 二叉搜索树(二叉排序树)中序遍历递增有序
- 平衡二叉树:左右两个子树高度差不超过1
二叉树的存储方式
- 链式存储:相当于链表,不过有left 和 right两个指针
- 顺序存储:用数组存储,若下标从0开始 2i+1下标是左子树, 2i+2下标是右子树
二叉树的遍历方式
- 深度优先遍历(回溯)
- 前(先)序遍历(递归法、迭代法 递归法本质用了栈这个数据结构)
- 中序遍历
- 后序遍历
- 广度优先遍历
- 树 – 一层层
- 图 – 一圈圈
二叉树的定义
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
二叉树的递归遍历
递归三部曲:
- 确定递归函数的参数和返回值
void traversal(cur, vec);
- 确定终止条件
if(cur == NULL) return;
- 确定单层递归的逻辑
// 前序遍历
vec.push(cur->val); // 中
traversal(cur->left); // 左
traversal(cur->right); // 右