度: 结点拥有子树的个数
叶子节点:没有子节点的节点
树的深度:节点的层数, 根节点默认为第一层。
有序 :树的左右位置不能改变。
二叉树常被用作二叉查找树和二叉堆
性质1:在非空二叉树的第i层至多有2^{i-1}个结点
性质2:深度为k的二叉树至多有2^k-1个结点
性质3:对任何一棵二叉树T,如果其中终端节点数为n0,度数为2的节点数为n2,则n0 = n2 + 1(n0表示度数为0的节点总数, n2表示度数为2的节点总数)
性质4:在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]+1是向下取整。
性质5:若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点:
(1) 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;
(2) 若 2i>n,则该结点无左孩子, 否则,编号为 2i 的结点为其左孩子结点;
(3) 若 2i+1>n,则该结点无右孩子结点, 否则,编号为2i+1 的结点为其右孩子结点。
除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。
一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树
叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树
完全二叉树是效率很高的数据结构,堆是一种完全二叉树或者近似完全二叉树,所以效率极高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能优化,几乎每次都要考到的二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树。
叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1。
具有n个结点的完全二叉树的深度为int(log2n)+1
出于简便起见,完全二叉树通常采用数组而不是链表存储:
(1)若i为奇数且i>1,那么tree的左兄弟为tree[i-1];
(2)若i为偶数且i<n,那么tree的右兄弟为tree[i+1];
(3)若i>1,tree的父亲节点为tree[i div 2];
(4)若2*i<=n,那么tree的左孩子为tree[2*i];若2*i+1<=n,那么tree的右孩子为tree[2*i+1];
(5)若i>n div 2,那么tree[i]为叶子结点(对应于(3));
(6)若i<(n-1) div 2.那么tree[i]必有两个孩子(对应于(4))。
(7)满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。
前序遍历
规则是若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树。
应用场景:判断两个二叉树是否相等,只要子树根节点不同,那么就不等
中序遍历
规则是若二叉树为空,则空操作返回,否则从根节点开始(注意并不是先访问根节点),中序遍历根节点左子树,然后访问根节点,最后中序遍历右子树
后序遍历
规则是若二叉树为空,则空操作返回,否则从左到右先叶子后节点的方式遍历左右子树,最后访问根节点
应用场景:删除二叉树,必须先删除左右子树,然后才能删除根节点
层次遍历
规则是若二叉树为空,则空操作返回,否则从树的第一层,也就是根节点开始访问,从上到下逐层遍历,在同一层中,按照从左到右的顺序对节点逐个访问
已知前序遍历序列和中序遍历序列,可以唯一确定一棵二叉树
已知后序遍历序列和中序遍历序列,可以唯一确定一棵二叉树
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。