数据结构之初识二叉树
二叉树光有看名字就知道每个节点可以有两个分支就同这棵树的节点。为什么要学习二叉树因为它相较于C语言中的冒泡和二分查找二叉树简直完爆它们主打一个效率高。接下来介绍几个在二叉树中常见的名称1.节点的度一个节点含有的子树的个数称为该节点的度2.叶节点或终端节点度为0的节点称为叶节点3. 非终端节点或分支节点度不为0的节点4. 双亲节点或父节点若一个节点含有子节点则这个节点称为其子节点的父节点5. 孩子节点或子节点一个节点含有的子树的根节点称为该节点的子节点6. 兄弟节点具有相同父节点的节点互称为兄弟节点亲兄弟7. 树的度一棵树中最大的节点的度称为树的度8. 节点的层次从根开始定义起根为第1层根的子节点为第2层以此类推9.树的高度或深度树中节点的最大层次10. 堂兄弟节点双亲在同一层的节点互为堂兄弟11. 节点的祖先从根到该节点所经分支上的所有节点12. 子孙以某节点为根的子树中任一节点都称为该节点的子孙13. 森林由mm0棵互不相交的树的集合称为森林以上加粗就是需要进行深入理解的。二叉树中又分为满二叉树和完全二叉树满二叉树就是每一层节点个数都是满的比如第一层就是2的零次方个节点第二层就是2的1次方节点就是2个节点即为满二叉树完全二叉树通俗说就是除了最后一层以外每个节点都要都要是满的并且最后一层分支要靠左连续就是比如这些树都不是连续靠左的正确应该是这是二叉树所具有的一些性质第三点是需要记忆的。在二叉树的学习中我们会学习到堆引出大堆和小堆大堆就是在顶部是整个树上值最大的元素小堆就是值最小我们要建一个堆其实很简单就是malloc出一个数组然后利用二叉树的节点特性建堆在二叉树中又父节点和子节点它们两者之间的关系是father*21或者2,为子节点子节点-1整体除以2就是父节点的下标位置经过正常开出数组后这个数组里面不是二叉树满足的顺序关系于是要按照父节点与子节点的关系进行向下调整或者向上调整代码如下先给出头文件再给出向上向下调整接下来就是开出数组空间的常规操作在二叉树的学习中分治递归是常用的方法有时题目还需结合栈和队列进行完成在C语言的学习中我们学习过递归递归核心思路是把大问题拆分为一个个小问题进行解决或者是说拆分为当前问题和子问题返回条件是最小规模的子问题在这方面学习时前期需按照递归一样画出递归展开图一步一步走读代码。在二叉树中存在前序遍历、中序遍历和后续遍历还有一个与队列结合的层序遍历我们先来学习前三个三者代码几乎一模一样就是放置顺序不同代码如下这是三者访问顺序不同之处拿上面举例二叉树应该这么看空白处用N表示。一棵树可以被拆分为左子树和右子树根根 左子树 根右子树左子树 右子树 左子树 右子树正因为可以这样一直拆的特性二叉树的题目离不开递归接着就给出二叉树与队列的综合题判断完全二叉树这里的实现需先制造队列代码层序遍历有些题目会给你三个遍历中的两个让你推第三个这里需要观察它们的特性前序第一个元素就是总根后序最后以为就是总根然后根据根的位置在中序中找出左子树和右子树然后在根据两者去画图判断。初学二叉树一定要画图解决问题。感谢观看