| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 二叉树需要掌握的基本知识 -> 正文阅读 |
|
[数据结构与算法]二叉树需要掌握的基本知识 |
目录 二叉树是树的一种特殊的结构 二叉树的特点:1、每个节点最多两颗子树,即二叉树不存在度大于2的节点(每个节点最多两个子节点)。 2、二叉树的子树有左右之分,其子树的次序不能颠倒。 特殊的二叉树1、满二叉树每一层的节点数都达到最大值,或者是一个二叉树的深度为k,总的节点数为2^k -1。 2、完全二叉树深度为k的二叉树,前k-1层是满二叉树,最后一层可以不满,但是从左到右得是连续的。满二叉树是完全二叉树的一种特殊情况。 左边的就是完全二叉树,右边的是非完全二叉树。 二叉树的性质1、若规定根节点的层数为1,则一棵非空二叉树的第 i 层上最多有2^(i-1)个节点。 2、若规定根节点的层数为1,则深度为 h 的二叉树的最大结点数是2^h- 1。 3、若规定根节点的层数为1,具有n个节点的满二叉树的深度为log以2为底,n+1为对数。 4、对于任何一棵二叉树,如果度为0的叶节点个数为n0,度为2的节点个数为n2,则n0=n2+1,也就是说度为0的比度为2的节点数多一个
二叉树的结构1、顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。 ? ?这种结构一般用在堆上。注意这里的堆是一种数据结构,而不是操作系统层面上的堆区。 ?2、链式结构数组只适合用来表达完全二叉树,如果不是完全二叉树,只能采用链表。 (1) 二叉链 采用结构体来实现这种结构。
(2) 三叉链 三叉链在二叉链的基础上多增加了一个指向父亲节点的指针。
二叉树的遍历二叉树的四种遍历方式? 1、前序遍历(先根遍历):根->左子树->右子树 参考上图的二叉树,得到的结果为:abdcef 2、中序遍历(中根遍历):左子树->根->右子树 得到的结果为:dbaecf 3、后序遍历(后根遍历):左子树->右子树->根 得到的结果为:dbefca 4、层序遍历:从左往右一层层的遍历 得到的结果为:abcdef 四种遍历的代码实现采用二叉链的方式构建一棵树 1、前序遍历 采用递归的思想:按照前序遍历的顺序(根->左子树->右子树),递归的方法本身很简单,非递归的方法值得一做。 LeetCode链接:144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com)
2、中序遍历 采用递归的思想:按照中序遍历的顺序(左子树->根->右子树) LeetCode链接:94. 二叉树的中序遍历 - 力扣(LeetCode) (leetcode-cn.com)
3、后序遍历 采用递归的思想:按照后序遍历的顺序(左子树->右子树->根)(这个的非递归有一定的难度) LeetCode链接:145. 二叉树的后序遍历 - 力扣(LeetCode) (leetcode-cn.com)
4、层序遍历 层序遍历比上述三种遍历稍微复杂一点 思想:采用迭代的方法,需要利用数据结构队列来辅助遍历,每次将根节点入队列时,需要把根节点的左子树的根节点和右子树的根节点依次入队列。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 15:31:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |