这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战
考纲分析
本章408与各自命题考察范围几乎相同。
(一)树的基本概念
(二)二叉树
1 .二叉树的定义及其主要特征
2 .二叉树的顺序存储结构和链式存储结构
3 .二叉树的遍历
4,线索二叉树的基本概念和构造
(三)树、森林
1 .树的存储结构
2 .森林与二叉树的转换
3 .树和森林的遍历
(四)树与二叉树的应用
1 .二叉搜索树【20版本:二叉排序树】
2 .平衡二叉树
3 .哈夫曼(Huffman)树和哈夫曼编码
森林与二叉树的转化及其节点计算
森林转化为二叉树:
①同层节点之间全部相连;②对每个节点只保留与最左孩子的连线;③顺时针旋转45。;④左树的右链与右树相连。
二叉树转化为森林:
①一直断右链;②逆时针旋转45;③把各二叉树恢复成树。
平衡二叉树的插入
插入位置与二叉查找树(二叉排序树)相同。
插入后若当前树不平衡,则进行以下三部曲:
一、确定旋转位置:离插入位置最近的失衡子树。
二、确定旋转类型:情况有以下4种:
(1)在失衡子树根节点的左孩子的左子树上插入:右单旋转
(2)在失衡子树根节点的右孩子的右子树上插入:左单旋转
(3)在失衡子树根节点的左孩子的右子树上插入:先左后右双旋转
(4)在失衡子树根节点的右孩子的左子树上插入:先右后左双旋转
三、开始旋转,注意“胳膊肘往外拐”的节点。
由遍历序列恢复二叉树
恢复二叉树牢牢把握住以下几点:
1 .中序序列中某一根节点的左侧全为其左子树,右侧全为其右子树;
2 .先序序列中根在最前面;
3 .后序序列中根在最后面;
仅有先序+后序无法唯一确定序列,但是可以确定节点之间的祖先关系,若X节点和Y节点在先序序列中为X Y,在后序序列为Y X,则X是Y的祖先。
关于递归
程序调用自身的编程技巧称为递归(recursion)。
想搞懂二叉树的算法,递归是无法回避的知识点,因为二叉树是天生适合递归的数据结构,绝大多数关于树的算法题都可以使用递归解法。
二叉树在定义时就使用了递归的概念:一棵二叉树要么是空树,如果不是空树,那么它的左右子树都是二 叉树。
二叉树的重要知识点:先中后遍历,同样采用递归定义,如先序遍历:若二叉树是空树,则什么都不做; 否则:(1)访问根节点;(2)先序遍历左子树;(3)先序遍历右子树。
递归的时间效率较低,不适合用于实际开发,但是却十分适合考研,因为考研中的二叉树算法题绝大多数 不会对时间复杂度有要求,所以写递归算法既简洁,又能节省时间。
考研写递归函数,使用以下三部曲:
(1)明确函数的功能。并且在函数内部调用自身时,认为其功能已经实现。
(2)给出递归终止条件。在二叉树中往往是:if(!root) return;
(3)根据题目的条件,分析如何在函数内部调用自身。