基础概念:
节点的度:一个节点含有的子树的个数
叶节点或终端节点:度为零的节点;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层
树的高度或深度:树中节点的最大层次;
树的类型:
1、满二叉树:一棵深度为k,且有2^k-1 (2的k次方减一)个节点称之为满二叉树 (也称完美二叉树,就是节点全有,只有度为2和0的节点)
2、完全二叉树: 如上图描述,一一对应,但是可以有缺漏(去除满二叉树黄色部分,可以少右子节点,不能少左子节点)
3、二叉搜索树: 非空左子树的所有键值小于其根节点的键值,非空右子树的所有键值大于其根节点的键值,左右子树都是二叉搜索树
搜索: 最小值 直接遍历到最左边的叶节点就行,最大值同理
插入 利用搜索算法用节点对比要插入的值,遍历找到要插入的位置插入即可
删除 :
层的最大节点和树的最大节点数:
1 、每一层最大节点数为 2的层-1次方 比如(根节点为1 那根节点最大的节点数为 2^(1-1) = 1 第二层则为 2^(2-1) = 2)
2、深度为k的二叉树最大节点总数为2的k次方-1(1+2^1+2^2+2^(k-1) = 2^k -1 , "2的k次方-1") 等比数列求和
任何非空二叉树,若N0表示叶节点个数,n2是度为2的非叶节点个数,那么两者满足关系 n0 = n2+1,解析如下:
n0+n1+n2-1 = 0*n0 + 1*n1+2*n2 ≈ n0+n2-1 = 2*n2 ≈ n0-1 = n2 ≈ n0 = n2+1
(各个节点的边,连接每个节点的边只有一条,根节点没有,所以-1) = (节点延伸出来的边数 n0 0个边 ,n1 1个边,n2 2个边)
节点的父子关系:
节点序号为i
非根节点的父节点的序号是[i / 2 ]
节点的左孩子节点的序号为 2i,右孩子节点的序号为2i+1
二叉树的遍历方式,如下:
(1)前序遍历,首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。
(2)中序遍历,首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。
(3)后序遍历,首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。
(4) 层序遍历 利用队列 首先读取当前节点数据,然后判断是否有左右子树,有则加到队列中。循环。
例子思想:
找所有叶节点: 在遍历算法中检测 左右子节点是否都为空
求树的高度: 递归 求左子树和右子树的深度,进行对比,取较大的深度,返回给上一层进行保存