1273. 删除树节点;2786. 访问数组中的位置使分数最大;889. 根据前序和后序遍历构造二叉树

1273. 删除树节点

核心思想:递归,从根节点出发,枚举父节点的子节点,如果它们的值加起来为0的话就把父亲的节点删除后剩余的数置为0,默认返回一个节点,del_remain保存的是,del_remain[x]表示完成删除操作后以x节点为父节点剩余的节点个数。

1273. 删除树节点;2786. 访问数组中的位置使分数最大;889. 根据前序和后序遍历构造二叉树_第1张图片

 2786. 访问数组中的位置使分数最大

核心思想:记忆化搜索,枚举第i个数选或不选,并用0,1标记上一个数的奇偶性,这种做法比dp好理解一点。

1273. 删除树节点;2786. 访问数组中的位置使分数最大;889. 根据前序和后序遍历构造二叉树_第2张图片

 

 889. 根据前序和后序遍历构造二叉树

核心思想:递归,遇到二叉树的问题尽量按照,复杂问题分解的方法来做,首先构造根节点,然后构造左子树,构造右子树,把三部分连接。构造左子树,构造右子树又可以分解为构造根节点+构造左右子树,从而解决这一问题,然后关键就在于找根节点,根节点pre[0],然后如何递归左子树,找到pre[1]在pos中的下标即可找到左子树的长度,从而分解出左右子树。1273. 删除树节点;2786. 访问数组中的位置使分数最大;889. 根据前序和后序遍历构造二叉树_第3张图片

 

你可能感兴趣的:(算法,python)