数据结构与算法(二叉树)~ 介绍二叉树以及力扣上几道二叉树题目的方法和套路

Posted 一乐乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法(二叉树)~ 介绍二叉树以及力扣上几道二叉树题目的方法和套路相关的知识,希望对你有一定的参考价值。

数据结构与算法(二叉树)~ 介绍二叉树以及力扣上几道二叉树题目的方法和套路

 

1,二叉树的数据结构:

(1)基本实现(组成):由一个一个根(或父结点)和左结点、右结点构成。

自己动手实现:定义了一个含有 数据域 左结点指针右结点指针 + (父结点【自己设计就加上,这样方便后续的一些操作】) 的 结点类Node。

(2)二叉树【需要先定义为一颗什么类型的二叉树(这样才能按照一定规则进行结点位置的添加),这里咱设计一棵 二叉搜索树主要的功能(增删改查):定义一些接口方法

 

 ■ 主要的功能(增删改查 + 各种方式的遍历 【前序遍历、中序遍历、后序遍历、层序遍历】+ 前驱结点、后驱结点(针对中序遍历的)+ 树的深度 + 是否为完全二叉树 ):

● 增加:制定一定比较规则(具体实现:【 二叉搜索树中传入一个比较器类对象(属性对象,可以不写,java内置有一个compator 比较器接口  ~ 组合关系)】 /

【让二叉搜索树 继承 比较类(java内置了comparable 接口) ~ 继承关系 /   将对象进行强制类型转化,然后就可以使用相应的接口方法啦,例如以下:~强制类型转化】)

 

● 删除:先查找到给结点,然后删除结点:删除过程~~~~~

● 查找:查找结点。

序遍历: 根(父)      左子树        右子树     |     根(父)      右子树         左子树     【前序只需满足 根最先访问】

序遍历:  左子树         根(父)      右子树      |      右子树         根(父)       左子树   【中序只需满足 根中间访问】

序遍历:  左子树           右子树         根(父) |      右子树         左子树            根(父) 【后序只需满足 根最后访问】

序遍历: 一层一层的结点从左到右进行访问。

● 前驱结点:中序遍历的前一个结点。

● 后驱结点:后序遍历的后一个结点。

 

 (3)过程中进行重构二叉搜索树,将 增删改查 或者一些通用的接口或者属性封装到外部抽象类或者接口(方便设计给其他类用这样子):

    

 

2,二叉树的力扣算法题:

 

 总结一些小套路吧 (没有通用的套路,就讲一下方法哈):

✿ 自己需要先知道的是二叉树的特点就是左右子树(左右结点)构成(一般没有特别强调的二叉树,结点类就是左右子树(结点)(没给父指针结点哈,咱自己设计加的))

套路: 层序遍历:一层一层从左到右,一个一个结点的遍历。使用的数据结构是 队列。

 

(1)101_对称二叉树 的方法 和 套路:

方法一:(该过程使用层序遍历~迭代的,使用的数据结构是队列~同时进行添加~ )

思路是:

● 两块镜子的思维:第一个镜子添加进入了左,则第二个镜子添加进入了右 然后第一个镜子添加进入了右,第二个镜子添加进入了左
● 非常非常的巧妙的一个点是作者通过了一个队列的数据,(同时成双添加)结果实现了一个镜子变成两个镜子的效果 
● 这里使用的数据结构是:队列(特点先进先出),为了进行(“两面镜子”)每一层的遍历的同步对比

 

(2)102_二叉树的层序遍历 的方法与套路 :

方法一:

方法二:

套路一:

 

(3)104_二叉树的最大深度 的方法与套路 :

方法一:

方法二:

套路一:

 

(4)105_从前序与中序遍历序列构造二叉树 的方法与套路 :

方法一:

方法二:

套路一:

 

(5)106_从中序与后序遍历序列构造二叉树 的方法与套路 :

方法一:

方法二:

套路一:

 

(6)107_二叉树的层序遍历II 的方法与套路 :

方法一:

方法二:

套路一:

 

(7)114_二叉树展开为链表 的方法与套路 :

方法一:

方法二:

套路一:

 

(8)144_二叉树的前序遍历 的方法与套路 :

方法一:

方法二:

套路一:

 

(9)145_二叉树的后序遍历 的方法与套路 :

方法一:

方法二:

套路一:

 

(10)226_翻转二叉树 的方法与套路 :

方法一:

方法二:

套路一:

 

(11)559_N叉树的最大深度 的方法与套路 :

方法一:

方法二:

套路一:

 

(12)589_N叉树的前序遍历 的方法与套路 :

方法一:

方法二:

套路一:

 

(13)590_N叉树的后序遍历 的方法与套路 :

方法一:

方法二:

套路一:

 

(14)662_二叉树最大宽度 的方法与套路 :

方法一:

方法二:

套路一:

 

(15)889_根据前序和后序遍历构造二叉树 的方法与套路 :

方法一:

方法二:

套路一:

 

(16)94_二叉树的中序遍历 的方法与套路 :

方法一:

方法二:

套路一:

 

数据结构与算法(二叉搜索树)~ 介绍二叉搜索树以及力扣上几道二叉搜索树题目的方法和套路

数据结构与算法(二叉搜索树)~ 介绍二叉搜索树以及力扣上几道二叉搜索树题目的方法和套路


1,二叉树的数据结构:

请参考文章:《数据结构与算法(二叉树)~ 介绍二叉树以及力扣上几道二叉树题目的方法和套路~ 第一部分

❀ 二叉搜索树的特点:

● 整个二叉搜索树非常有特点,根大于左子树, 小于右子树

● 二叉搜索数的中序遍历是有序的~升序的

✿ 总结一些小套路吧 (没有通用的套路,就讲一下方法哈):

(1)108_将有序数组转换为二叉搜索树 的方法 和 套路:

方法一:利用二叉搜索树特点:根大于左,小于右【将数组不断地按中间点划分成左右子树】


(2)173_二叉搜索树迭代器 的方法 和 套路:

方法一:迭代器(容器,提前存储了按照一定规则摆放的数据~ 中序遍历(递归)),然后定义一个全局索引变量来辅助是否有next和进入next

方法二:迭代器(容器,提前存储了按照一定规则摆放的数据~ 中序遍历(迭代)),然后定义一个全局索引变量来辅助是否有next和进入next~因为题意要最小的,所以next方法,next到最后一层后【左为null】,该值【根】便是所求,然后切换到右边


(3)230_二叉搜索树中第K小的元素 的方法 和 套路:

方法一:中序遍历【递归法~辅助变量,递归到第k次 便是所求】

方法二:中序遍历【迭代法~辅助变量,pop掉k个数,便是所求】


(4)450_删除二叉搜索树中的节点 的方法 和 套路:

方法一:

        //删除值大于 根值,则只能在左子树删除目标,删除值小于根值,只能子啊右子树删除目标。

       //当删除的目标就是根值时,考虑:① 根是叶子 【根置空】 ② 有右子树 【根用后驱结点值覆盖,然后对右子树的重复结点进行删除】

       ③ 没有右子树【只能到左子树找了,根用前驱结点值覆盖,然后对左子树的重复结点进行删除】


(5)530_二叉搜索树的最小绝对差 的方法 和 套路:

方法一:

方法二:

套路一:

(6)700_二叉搜索树中的搜索 的方法 和 套路:

方法一:

方法二:

套路一:

(7)701_二叉搜索树中的插入操作 的方法 和 套路:

方法一:

方法二:

套路一:

(8)783_二叉搜索树节点最小距离 的方法 和 套路:

方法一:

方法二:

套路一:

(9)938_二叉搜索树的范围和 的方法 和 套路:

方法一:

方法二:

套路一:

(10)98_验证二叉搜索树 的方法 和 套路:

方法一:

方法二:

套路一:

(11)99_恢复二叉搜索树 的方法 和 套路:

方法一:

方法二:

套路一:

以上是关于数据结构与算法(二叉树)~ 介绍二叉树以及力扣上几道二叉树题目的方法和套路的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法(栈)~ 介绍栈以及力扣上几道栈题目的方法和套路

数据结构与算法(数组)~ 介绍数组以及力扣上几道数组题目的方法和套路

二叉树的四种遍历方式以及中序后序前序中序前序后序层序创建二叉树专为力扣刷题而打造

二叉树的四种遍历方式以及中序后序前序中序前序后序层序创建二叉树专为力扣刷题而打造

二叉树的四种遍历方式以及中序后序前序中序前序后序层序创建二叉树专为力扣刷题而打造

编程熊讲解力扣算法《二叉树》