大家好,关于那些年错过的数据结构与算法心得分享(九)很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
二叉树
1.基本概念
(1) 二叉树是一组有限的节点,它要么为空,要么由一个根节点和两个不相交的左右二叉子树组成。
二叉树有以下特点:二叉树可以为空,空二叉树没有节点,非空二叉树只有一个根节点;每个节点最多有2个子树,分别称为该节点的左子树和左子树。右子树;二叉树的子树分为左子树和右子树,它们的顺序不能任意颠倒。
(2)满二叉树和完全二叉树
满二叉树是除最后一层之外的每一层的所有节点都有2 个子节点的二叉树。
完全二叉树是指除了最后一层外,每一层的节点树都达到最大值,并且最后一层只有右边的少数节点缺失。
满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。
2.主要性质(原谅我不知道怎么打上标.)
非空二叉树第k层最多有(2的k-1次方)个节点(K1);深度为m的满二叉树,有(2的m -1次方)个节点;对于任何二叉树,度数为0的节点(即叶节点)总是比度数为2的节点多一个; n 个节点的二叉树的深度k 至少为[log2n]+1,其中[log2n] 取log2n 的整数部分; n 个节点的完全二叉树的深度为[log2n]+1;假设完全二叉树总共有n个节点。如果我们从根节点开始,按层顺序(从左到右每层)使用数字1, 2. n 对节点进行编号,则对于数字k (k=1, 2.n)节点有以下结论:
如果k=1,则该节点是根节点,没有父节点;
如果k=1,则该节点的父节点数为k/2;
如果2kn,则节点号k的左子节点数量为2k,否则该节点没有左子节点(显然没有右子节点);
如果2k+1n,则编号为k的节点的右子节点编号为2k+1,否则该节点没有右子节点。
3.存储结构
二叉树通常采用链式存储结构。用于存储二叉树中每个元素的存储节点由数据字段和指针字段组成。由于每个元素可以有2个后继(即2个子节点),所以有2个指针字段用来存储二叉树的存储节点:一个指向该节点的左子节点的存储地址,称为左子节点指针字段;指向该节点右子节点的另一个存储地址称为右指针字段。因此,二叉树的链接存储结构也成为二叉链表。二叉树的一个存储节点如下:
左指针字段数据字段右指针字段L(i)Data(i)R(i) 对于满二叉树和完全二叉树,它们可以按顺序分层存储。
4.二叉树的遍历
二叉树遍历是指不重复地访问二叉树中的所有节点。分为前序遍历、中序遍历和后序遍历。
前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。中序遍历首先访问左子树,然后遍历根节点,最后遍历右子树。后序遍历首先访问左子树,然后遍历右子树,最后遍历根节点。下面以二叉树为例进行说明:
tree.png 对这个二叉树执行了3 次遍历,
前序遍历的结果为:A-B-D-G-E-H-C-F-I。中序遍历的结果为:G-D-B-E-H-A-C-F-I。后序遍历的结果为:G-D-B-E-H-I-F-C-A。概括:
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!
【那些年错过的数据结构与算法心得分享(九)】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
最近在想很多当年学习中遇到的算法问题,真的后悔当时没多深入了解一下。
有7位网友表示赞同!
数据结构和算法一直是编程世界的基础啊,可惜当初我更偏向于实际的应用开发。
有11位网友表示赞同!
那些年为了赶进度,总是想着先写代码,再回头学这些理论知识,结果现在还是没太入门。
有9位网友表示赞同!
感觉有些算法概念确实很抽象难懂,当时一直摸不清头脑。
有7位网友表示赞同!
回想起大学的时候,数据结构和算法课真的让人挠头啊…
有8位网友表示赞同!
也许这就是传说中的“打工人思维”,现在想想以前真的是太专注于眼前了
有20位网友表示赞同!
很多时候觉得这些知识点和工作没什么关系,所以没认真学习过。
有18位网友表示赞同!
其实当时如果把这些概念理解透彻一点,编程效率肯定能提高不少!
有9位网友表示赞同!
看到这标题就想起来我的大学时光!数据结构和算法课记得是班上最难的課程之一了。
有13位网友表示赞同!
现在想学习算法,感觉时间和精力都比以前少很多啊...
有20位网友表示赞同!
当年错过的知识点,希望有机会能补回来!
有13位网友表示赞同!
这篇文章看后觉得,数据结构和算法的重要性真的不能忽视!
有5位网友表示赞同!
那些年,只顾着写代码忘记学习理论基础,现在看来真是个遗憾。
有8位网友表示赞同!
也许现在的时间更适合回头回顾这些知识了,来提升自己。
有20位网友表示赞同!
有些算法的原理确实很牛!当初应该好好学习研究一下的啊…
有10位网友表示赞同!
看到这篇标题突然想起来当年的一些编程经验。
有14位网友表示赞同!
想要成为一名优秀的程序员,的确要扎实掌握这些基础知识!
有13位网友表示赞同!
如果能早点接触到这些理论知识,现在编程一定能更得心应手!
有17位网友表示赞同!
数据结构和算法是软件开发的基石,这篇文章很有意义!
有20位网友表示赞同!