代码随想录算法训练营0521| 理论基础、递归遍历 、迭代遍历、统一迭代

理论基础

1、分类

满二叉树

完全二叉树

二叉搜索树

平衡二叉搜索树

2、存储方式

链式存储:链表存储。节点除了存储数据,还存了指向左右节点的指针

线式存储:列表存储。按照数组从上到下从左到右,存储在列表中。

3、遍历

①深度优先搜索(DFS):可用迭代法或递归法遍历

前序遍历:中左右--->先访问中心节点,然后左子树,全部访问完后,访问右子树。

访问结果:1245367

中序遍历:左中右:4251673

后序遍历:左右中:4526731(只要有左就一直向左)

序指的是遍历根节点的顺序。

②广度优先搜索(BFS):可用迭代法遍历。

理解非常片面,后面结合题目再理解

4、定义

一般是用链表进行定义(对应链式存储),定义方式如下:

class TreeNode:
    def __init__(self, val, left = None, right = None):
        self.val = val
        self.left = left
        self.right = right

二叉树第一次接触,不好理解。看看刷完题会不会有更深的理解

递归遍历

哎呀递归,理解非常不透彻,感觉像个黑盒子,如懂。

卡哥总结的写递归法的三要素,上次我自己好像也总结了,但是没有找到。大概就是把for/while循环的单层拎出来写成一个函数,将函数输出再次作为函数的输入,直至满足终止条件。

卡哥的递归写法三要素:

①确定输入输出参数

②确定终止条件

③确定单层循环要完成的内容

递归法遍历,就是两重链表的查询元素。主要是这三句的出现顺序,就是节点的遍历顺序:(前中后序遍历,都是深度优先搜索dfs)

res.append(node.val)#当前根节点的值
dfs(node.left)#此根节点的左子树
dfs(node.right)#此根节点的右子树

迭代遍历

统一迭代

总之理解都不太深,很难理解输入数组和存储的方式的关系。还有之前隐约接触一点的满二叉搜索数,为什么是对sorted的数组进行存储也不太好理解。因此迭代法先跳过,之后全部都是用递归法来编程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值