二叉树(Binary Tree) 是一种树形数据结构,其中每个父节点最多可以有两个子节点。 二叉树的每个节点(node)包含三个属性:data 数据、left 左子节点的地址、right 右子节点的地址。
满二叉树(Full Binary Tree):每个结点要么没有子结点,要么有两个子结点。
完美二叉树(Pefect Binary Tree):每个结点都有两个子结点,所有叶子结点都在同一层。
完全二叉树(Complete Binary Tree):从根结点到倒数第二层为完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。
二叉树天然的具有递归结构,二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的, 分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。
二叉树的遍历方式
LeetCode 题目中,二叉树的遍历方式是最基本,也是最重要的一类题目。先介绍一下二叉树的遍历方式。
先序遍历(前序遍历):按照根节点 -> 左孩子 -> 右孩子 的方式遍历,即「先序遍历」,每次先遍历根节点,遍历结果为 1 2 4 5 3 6 7;
中序遍历:按照左孩子 -> 根节点 -> 右孩子 的方式遍历,即「中序序遍历」,遍历结果为 4 2 5 1 6 3 7;
后序遍历:按照左孩子 -> 右孩子 -> 根节点 的方式遍历,即「后序序遍历」,遍历结果为 4 5 2 6 7 3 1;
层序遍历:按照每一层从左向右的方式进行遍历,遍历结果为 1 2 3 4 5 6 7。