AcWing+力扣 树结构题解

101-对称二叉树

在这里插入图片描述
要保证对称,从2边同时向下同步寻找值
在这里插入图片描述

104-二叉树的最大深度

在这里插入图片描述
先看这个点是不是叶节点,如果是的话,那么比较最大值,不是的话继续深搜
在这里插入图片描述

145-二叉树的后序遍历

在这里插入图片描述
这题的题解还是比较详细的,主要要弄懂递归的思路是什么,以及nullptr要在什么时候插入,为何插入进行了解。先了解先序递归的套路,再想后序递归会简单很多。
在这里插入图片描述

105-从前序与中序遍历中构建二叉树

在这里插入图片描述这里的bulidtree中参数传了TreeNode*&root,表示引用,我们在这个函数可以修改root,如果不引用,root相当于没指引
在这里插入图片描述

验证二叉树的前序序列化

在这里插入图片描述
看题解才明白怎么做,毕竟我也是新手啊,哭了。
其实只要从左到右遍历,我们仔细观察或者推演一下,一个完全二叉树,最后#个数一定比整数个数大一,并且为了满足每个节点都可以具备完全二叉树的条件,#的数目不能太多,一旦比整数个数多1,那么肯定需要这个string已经遍历到结尾了,如果没有,那么没空间来继续放整数或者#了,所以这是一个false条件。其他得没啥。
在这里插入图片描述

二叉树的层序遍历

在这里插入图片描述
这题其实和访问最深深度差不多的思想,前序遍历,哪一层入那一层的vector
这题有个vector的resize函数,表示重新设置vector的长度,这题用这个函数好很多。
在这里插入图片描述
在这里插入图片描述
中序遍历,找值,找到值放进map,如果里面有target-值,那么flag为true,不用剪枝,不会超时。
在这里插入图片描述

236-二叉树的最近公共祖先

在这里插入图片描述
对于任何一个结点,都可以看成是以该结点为root的树,所以可以递归,要找最近公共祖先,如果p,q在两边,则返回root,如果,只有一边有,另一边没有,则返回有的那一边,不断返回,直到返回到两边都有时,返回根。
在这里插入图片描述

543-二叉树的直径

在这里插入图片描述
直径要由左子树最深深度和右子树最深深度加起来。
所以我们要定义一个dfs返回最深深度,并且在递归中记录最大直径。
在这里插入图片描述

124-二叉树的最大路劲和

在这里插入图片描述
刚开始想到了树形DP,和树形DP很像,但是构建不出树来,所以放弃了
我们从第2个图看,最大值可能由-10作为连接点,连接左右子树,也可能知识单个子树的最大值。那么我们只要记录这两个值,比较最大值,就可以得到。dfs,返回调一个子树的最大值,比如-10要调用20,那么我们对于20结点,可以选20-15,也可以20-7,我们只要比较这2结点和最大值,就行。那么怎么判断15-20-7这3个结点的最大值,我们需要在遍历20结点时,遍历完左右字数后,将两子树的与结点值求和看一下多大。
在这里插入图片描述

87-扰乱字符串

在这里插入图片描述
我们从1枚举到length-1,保证每个二叉树的种类都可能被枚举到,如长度5的,有1和4,2和3,3和2,4和1建树的。然后对每个种类,我们再次判断,看看这个类别能不能扰乱,即再次枚举,比如1和4中,1肯定可以,不用扰乱,4我们从1到3枚举,看看能不能再次分开,使得分开的字符串能不能相等,如果排序都不相等,说明字符串不能以这个种类分,false,直到最后分到最后是s1==s2时,返回true,中途一旦有个地方字符串分开导致,左右子树的字符串不相等,都会false。只有不断保证左右子树的字符串排序后相等,才能是扰乱的字符串。
在这里插入图片描述

117-填充每个结点的下一个右侧结点的指针

在这里插入图片描述
扫描一行时,用tail指针不断的将一行的所有结点的所有子结点连起来,然后,当我们一行扫完后,我们用dummy指针来维护下一行的起始节点,定义一个dummy结点,再将该节点赋值给tail结点,这样tail和dummy指向的是同一个地方,所以维护了dummy的值。
在这里插入图片描述

99-恢复二叉搜索树

在这里插入图片描述
二叉搜索树的特点是中序遍历会得到排序,这里交换2个数字相当于把原来得排序扰乱了,可以开个vector进行存储值,然后找到这2个扰乱得值,进行交换就可。
当然也可以迭代遍历,用栈模拟递归。不断先找左子树,找完就把根点遍历,遍历完就再遍历右子树。这里的如果head->right为NULL时,相当于一个树的左结点全部遍历结束,然后root=NULL,这是,在栈中拿出根结点,遍历。
在这里插入图片描述

337-打家劫舍

在这里插入图片描述
经典得树形DP题目,不过这边用树,我们用dp有点麻烦,直接dfs,用pair得2个值来记录这个取不取的情况
在这里插入图片描述
以上就是树结构的AcWing的所有题解了,尽量自己先思考一遍,不会看题解。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值