1.树的常见概念
树是一个有n个有限节点构成的具有层次关系的集合,每一个节点有0个或者多个子节点,每一个节点仅有一个父节点(没有父节点的节点称之为根节点)
2.树的常见类型
平衡二叉树:任何一个节点的左右节点高度差不大于1
搜索二叉树:任何一个节点的值大于左节点并小于右节点
满二叉树:二叉树内只有度为0和度为2的节点,并且度为0的节点在同一层
完全二叉树:除了最后一层以外,每层的节点的度都为2,并且最后一层的元素都集中在左侧区域
3.树的定义
节点内两个指针分别指向该节点的左孩子和右孩子
链表存储
public class TreeNode {
int val;
TreeNode leftNode;
TreeNode rightNode;
public TreeNode(int val) {
this.val = val;
leftNode = null;
rightNode = null;
}
}
数组存储
如果父节点的下标为 i ,则 它的左孩子下标为 2i+1 ,它的右孩子下标为 2i+2
如果不是一个满二叉树或者完全二叉树,用数组存储节点会造成很大的空间浪费(不推荐)
4.树的遍历方式
广度有限遍历:即层次遍历,遍历完一层再遍历第二层
深度优先遍历:先往深度走,遇到叶子节点再返回(前,中,后序遍历)
5.通过序列构造二叉树
两种方式:通过前序或者后序确定根节点,在中序通过根节点位置划分出左右子树,以此类推
前序 + 中序 构造二叉树
后序 + 中序 构造二叉树
6.构建二叉树(java代码)
未解决中......