Android技能树 — 树基础知识小结(一)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

继续画个图来说明,省得打字了,嘿嘿:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分类

树也是会根据不同条件,做了分类,我们来了解一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那有序树和无序数的区别在于哪里呢?

如果将树中结点的各子树看成从左至右是有次序的,不能互换,则成为有序树,否则就是无序树

比如我们只是单纯的表示一个家族的关系:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比如只是说明A的孩子有B跟C,这时候B和C换了位置叶 没关系,这时候就是无序树。

但是如果我们这个家族谱是按照年龄来排序(长子,次子),那这时候B和C就不能换位置了,这时候就是有序树。

但是我们平常说的树通常都是指的有序树,而有序树有很多分类,比较多的就是二叉树。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二叉树:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基本形态:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二叉树性质:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其实这个类似与我们以前数学课上要背的数学公式,大家可以自己画个二叉树,然后试着上面的公式比对下,是不是正确。

遍历二叉树:

二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问依次且仅被访问一次。

前序遍历:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单单看这个图,其实换成我,我也看不懂规律,但是我们只需要懂得其中的规则就行。

伪代码:

遍历(结点对象 t){
if( t == null){
return;
}
//第一步,实现某个业务操作,比如我们是打印结点字符串。
print(t)
//第二步,递归方式继续调用该方法遍历左孩子
遍历(t.左孩子)
//第三步,递归方式继续调用该方法遍历右孩子
遍历(t.右孩子)
}

我们看到因为print在其他方法的前面,所以叫前序遍历。我们现在传入根结点到这个方法,然后依次打印并且递归,就会发现,就是图上的顺序。

中序遍历:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

伪代码:

遍历(结点对象 t){
if( t == null){
return;
}
//第一步,递归方式继续调用该方法遍历左孩子
遍历(t.左孩子)
//第二步,实现某个业务操作,比如我们是打印结点字符串。
print(t)
//第三步,递归方式继续调用该方法遍历右孩子
遍历(t.右孩子)
}

我们发现只要把我们的打印语句放在中间,就是中序遍历了。

后序遍历:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

伪代码:

遍历(结点对象 t){
if( t == null){
return;
}
//第一步,递归方式继续调用该方法遍历左孩子
遍历(t.左孩子)
//第二步,递归方式继续调用该方法遍历右孩子
遍历(t.右孩子)
//第三步,实现某个业务操作,比如我们是打印结点字符串。
print(t)
}

我们发现只要把我们的打印语句放在最后,就是后序遍历了。

二叉树分类:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

斜树:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完全二叉树与满二叉树:

一棵深度为k,且有 2^(k+1) - 1 个节点的二叉树称为满二叉树,这种树的特点是每一层上的节点数都是最大节点数。

而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

满二叉树

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完全二叉树

平衡二叉树:

这块知识很多,后期补上。

排序二叉树:

这块知识很多,后期补上。

线索二叉树:

n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")。

这里一定要说明一个知识点:什么是前驱和后继。

网上很多人都是对这个解释太过于简单以至于很多人理解错误,比如:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

假设我们现在有这个一个二叉树:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我现在问 I 的前驱是谁,后继是谁,很多人就单纯的从树的形状上来看,也就是看 I 的上一个结点是D,所以前驱是D, I 没有后面的子结点,所以后驱为空。这种回答是错误的。我们在 Android技能树 — 数组,链表,散列表基础小结文中提到过前驱和后继:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比如双向链表就是有前驱和后继。那我们单纯看这棵树是看不出来的,我们要先把树按照某个遍历方式的时候,把它用这种链表形式摆列,然后才能知道某个结点的前驱和后继是什么,比如上面的图我们用中序遍历,我们得到的是:HDIBJEAFCG,这时候 I 的前继是D,后继是B。

我们在二叉树存储结构中,有二个指针指向它的二个子结点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

尾声

以薪资待遇为基础,以发展为最终目标,要在高薪资的地方,谋求最好的发展!

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。有**Android架构视频+BATJ面试专题PDF+核心笔记等资料。希望能够帮助到大家提升技术。如果大家想要获取的话,可以私信我【666】免费获取哦**

Android行业大佬对应上方技术点整理的一些进阶资料。有**Android架构视频+BATJ面试专题PDF+核心笔记等资料。希望能够帮助到大家提升技术。如果大家想要获取的话,可以私信我【666】免费获取哦**

[外链图片转存中…(img-Ao4DihLE-1710568582387)]

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值