算法随想录算法训练营 ---第二十天

今天对最大二叉树,搜索二叉树进行了学习,并且对于构造二叉树进行了复习。今天也是顺利A出前三道题。最后一题了解了二叉搜索树之后,也是很简单A出来。

第一题:

算法随想录算法训练营 ---第二十天_第1张图片

 简述:

本题的思路为首先找到数组中的最大值,然后根据最大值分割数组,最后不断递归完成二叉树的构建。本体思想和我第十八天时最后一题的思想相同。

递归版:

算法随想录算法训练营 ---第二十天_第2张图片

 题解递归版(未优化)

算法随想录算法训练营 ---第二十天_第3张图片 递归版(优化后):因为未优化前每次递归都要不断地创建新的数组,浪费了许多资源,所以,我们通过索引下标来直接操纵数组。

算法随想录算法训练营 ---第二十天_第4张图片

 第二题:

算法随想录算法训练营 ---第二十天_第5张图片

简述:

我的思路是两颗树同时便利,以第一颗树作为改变树,第二棵树来判断是否改变。其中,有四种情况

1.树一左为空,树二左不为空

2.树一左不为空,树二左不为空

3.树一右为空,树二右不为空

4.树一右不为空,树二右不为空

其中,为何没有树二为空的情况。因为树二为判断树,当树二为空时,树一不会有任何变化,所以我们不许操作该种情况。有几点坑要注意是:遍历时问我们要注意当有3.4两种情况时,判断完之后我们要返回,但另一条不返回要继续递归。比如说左孩子为空判断后,左孩子那条路不走,右孩子那条路要走。

递归版:

算法随想录算法训练营 ---第二十天_第6张图片

题解(递归): 

前中后序都可以

算法随想录算法训练营 ---第二十天_第7张图片 

题解思路

算法随想录算法训练营 ---第二十天_第8张图片 

算法随想录算法训练营 ---第二十天_第9张图片 

第三题:

算法随想录算法训练营 ---第二十天_第10张图片

简述:

利用了二叉搜索树的有序性

递归版: 

算法随想录算法训练营 ---第二十天_第11张图片

迭代法:

算法随想录算法训练营 ---第二十天_第12张图片

第四题:

算法随想录算法训练营 ---第二十天_第13张图片

简述:

本题主要是考验对二叉搜索树的了解,提到二叉搜索树,就要想到中序遍历。

递归版:

暴力递归

算法随想录算法训练营 ---第二十天_第14张图片

比值递归 

算法随想录算法训练营 ---第二十天_第15张图片

双指针递归 (优化了如果有最小值如何解决的问题)

算法随想录算法训练营 ---第二十天_第16张图片

迭代版:

算法随想录算法训练营 ---第二十天_第17张图片

总结: 

今天感觉还可以,最近越来越顺手了。继续加油!

你可能感兴趣的:(算法,数据结构)