1.树的度:例如最大节点的度(直接子孩子个数)
二叉树:在二叉树中,节点的度都不超过2
2.子树都是不相交的
3.叶子节点:树中度为0的节点
父节点:度不为0的节点
4.在任意树中,满足边长=定点数-1
二叉树:
1.节点个数N和高度(深度k,根节点为第一层的关系)
N = 2^k-1(最大节点存在满二叉树中)
2.若深度为K,则第k组的节点最多有2^(k-1)个节点
3.在任意的二叉树中,满足度为2的节点N2和叶子结点N0的关系如下:
N2 = N0-1
其实就是根据1边长 =顶点数-1
二叉树中只可能存在度为2,1.0的节点,分别命名为N2,N1,N0
总的节点数 = N2+N1+N0
边长 = 2N2 + N1 + N0
2N2 + N1 = N2 + N1 + N0 -1
=> N2 = N0 -1
在完全二叉树中存在两个阶段:第一阶段中:每个节点的度都为2
当碰到第一个度为1的节点或者叶子结点,进入第二阶段在第二阶段中,碰到的所有节点均为叶子结点.
若根节点编号从1开始,则在完全二叉树中,任意节点均为满足
该节点的编号为x ,则左孩子编号为2x,右孩子编号为2x+1,父节点编号为x/2
完全二叉树,度为1的节点要么存在且唯一,要么不存在
若完全二叉树的节点个数为偶数,度为1的节点一定存在且唯一
若完全二叉树的节点个数为奇数,一定不存在度为0的节点
任意的数组结构在计算机内部存储时候都分为基于数组方式的顺序存储和基于引用方式的链式存储
二叉树也分为顺序存储和链式存储
只有完全二叉树适合采用顺序存储(二叉树有左右之分)
完全二叉树的节点都是靠左排列的,不可能存在只有右子树没有左子树的节点.
二叉树的链式存储
左右孩子表示法
class TreeNode(
int val;
TreeNode left;
Tree Node right;
)
孩子双亲表示法:树中每个节点除了保存树节点外,还要保存其父节点的引用->常用平衡树的定义中
平衡树
;什么是对于一个数据结构的遍历?遍历不仅仅指的是元素的打印或者输出(遍历的一种方式而已)
按照一定的规则,将该数据结构中所有元素访问一次,做到不重不漏(遍历不仅仅是打印)
对于线性数据结构如链表,数组来说,遍历非常容易,要么从前向后遍历,要么从后向前遍历
在非线性结构,如二叉树中,遍历的方式就很多,其实各式各样的树形问题最终都可以看做是如何进行该树的遍历问题
采用不同的遍历方式,得到结果也完全不同
(一)深度优先搜索(二叉树的高度):dfs
这里的序指的是根节点什么时候访问
前序遍历 :
中序遍历:
后序遍历:
(二)广度优先搜索(二叉树的宽度):bfs
层序遍历:从二叉树的树根开始不断从上至下,从左至右的遍历。
**序列规律
二叉树的基本问题实现
1.前序,中序,后序的遍历
2.求二叉树的节点个数:
3.找叶子节点个数
4.找树的高度
总结:
5. 在给定一颗以root为树根的二叉树,求出第k层的节点个数(k<=height)
6.检测val的值是否存在?