X86反汇编_深度学习_基础二叉树

引言

  • 在之前学习递归的过程中,我一直没能透过表层代码去探究其底层的运行逻辑,直到今天复习这段单值二叉树的递归代码时,我对递归产生了全新的、更本质的理解。

  • 我们都知道,递归的学习是从最简单的二叉树前、中、后序遍历开始延伸拓展的,而在实际的算法 OJ 题目中,递归代码并不会直接标注属于前序、中序还是后序遍历,这就需要我们自主判断其遍历类型。以我刚刚编写的单值二叉树判定函数为例,我们可以清晰地分析出它属于前序遍历,究其原因,这段代码在向下递归的过程中会先执行判断操作,一旦发现节点数值不相等就会直接返回,这正是前序遍历的核心执行特征。而判断二叉树递归遍历顺序的本质依据,在于厘清核心业务动作与递归调用语句的先后关系:如果递归调用在前,核心动作执行在后,那么这就是典型的后序遍历;

  • 而在本题中,核心动作是判断当前节点与其左右子节点的数值是否相等,这个判断动作被放置在递归调用自身的语句之前,因此这是一段典型的前序遍历递归实现。

  • 在前序和后序中,一般来说都是前序和后序,然后中序的话是用的非常少的,所以我们也可以忽略,不然后的话就是在我们前序和后续的一个根本的区别。我们之前讲过,是这个动作在前还是动作在后,那么根据这个观点可以进行一个延伸,就是当我们如果动作在前的时候,如果这个动作没有成立,进行一个 return,这个回收的一个操作的时候,那么我们的这个路径就相当于是一个从中心,也就是说这个节点头往四周扩,这个四周扩的意思就是说往下走。走到这个动作停止为止,然后再往回收。那么它是一个有依据的,就是说就相当于说你是进行一个辐射,然后因为碰到一些阻碍,然后回来的这一个过程,它的路径是有依据的,就是说是会根据你这个条件有一个依据性。但是我们的这个后序遍历的话,无论如何都要先而走满为止,然后再进行一个回收的一个过程。所以说的话,当我们一般用于这个后续便利的话,都是用于求一些什么节点或者是叶子节点这种,或者是什么高度,这种在一般来说肯定是前序用的是最多的,因为它的这个符合的这些条件也是最宽泛的。

1. 前序遍历

1.1 反汇编分析

1.2 映射C语言代码


2. 中序遍历

2.1 反汇编分析

2.2 映射C语言代码


3. 后序遍历

3.1 反汇编分析

3.2 映射C语言代码


4. 计算二叉树节点个数

4.1 反汇编分析

4.2 映射C语言代码


5. 求叶子节点个数

5.1 反汇编分析

5.2 映射C语言代码


6. 求二叉树节点高度

6.1 反汇编分析

6.2 映射C语言代码


7. 找到二叉树中值为x的节点

7.1 反汇编分析

7.2 映射C语言代码


8. 检查两棵树的节点是否相同

8.1 反汇编分析

8.2 映射C语言代码


9. 单值二叉树

9.1 反汇编分析

9.2 映射C语言代码


10. 前序遍历

10.1 PreorderTraversal

10.2 _PreorderTraversal

10.3 PreorderTraversalSize

10.4 映射成C语言代码


本章完~

相关推荐
iCxhust4 小时前
汇编返回指令ret iret retf区别
汇编·微机原理·8088单板机
怣疯knight1 天前
ida里打印python版本
汇编
是星辰吖~1 天前
X86反汇编_深度学习_栈反汇编分析
汇编
是星辰吖~1 天前
X86反汇编_深度学习_队列反汇编分析
汇编
say_fall1 天前
半导体存储器_从分类到Cache完全指南
汇编·微机原理·8086
是星辰吖~2 天前
x86反汇编_深度学习_单链表
汇编
是星辰吖~2 天前
x86反汇编_深度学习_链表OJ题反汇编
汇编
乾复道3 天前
k8s使用说明
汇编·程序人生
技术不好的崎鸣同学3 天前
x64汇编之堆栈工作原理理论篇(继上篇内容讲解)
汇编