Python不熟悉

不同的做法

404. Sum of Left Leaves

这是我的做法,AC。

class Solution(object):
res = 0
def recursive(self, root):
if root == None:
return
if root.left != None and root.left.left == None and root.left.right == None:
self.res += root.left.val
self.recursive(root.left)
self.recursive(root.right)
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.recursive(root)
return self.res

也可以进行迭代:

# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def sumOfLeftLeaves(self, root):
"""
:type root: TreeNode
:rtype: int
"""
## 3rd try: iterative bfs
if not root:
return 0
self.queue = [root]
self.ans = 0
while self.queue:
n = self.queue.pop(0)
if n.left:
if n.left.left == None and n.left.right == None:
self.ans += n.left.val
else:
self.queue.append(n.left)
if n.right:
self.queue.append(n.right)
return self.ans
## 3.2: iterative dfs
'''
if not root:
return 0 self.res = 0
self.stack = [root]
while self.stack:
node = self.stack.pop() if node.left:
if node.left.left is None and node.left.right is None:
self.res += node.left.val
else:
self.stack.append(node.left)
if node.right:
self.stack.append(node.right) return self.res
'''
## 2nd try with help from discussion: recursive on local variable
'''
if root == None:
return 0
ans = 0
if root.left and root.left.left == None and root.left.right == None:
ans = root.left.val
return ans + self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)
'''
## 1st try: recursive on global variable
'''
self.ans = 0 def dfs(root, isLeft):
if root == None:
return
if not root.left and not root.right:
if isLeft:
self.ans += root.val
return
dfs(root.left, True)
dfs(root.right, False) dfs(root, False)
return self.ans
'''

没有理解题意

563. Binary Tree Tilt

AC版本:

# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
count = 0
def recursive(self, root):
if root == None:
return 0
left = self.recursive(root.left)
right = self.recursive(root.right)
self.count += abs(left - right)
return root.val + left + right
def findTilt(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.recursive(root)
return self.count

加速版本,利用tuple一个保存累积的tilt,一个保存当前结点的子结点的和:

class Solution(object):
def findTilt(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
(tree_tilt,s)=self.recurTilt(root)
return tree_tilt
def recurTilt(self,root):
#return tree tilt, and tree nodes sum
if not root:
return 0,0
(ltree_tilt,l_sum)=self.recurTilt(root.left)
(rtree_tilt,r_sum)=self.recurTilt(root.right)
node_tilt=abs(l_sum-r_sum)
return (ltree_tilt+rtree_tilt+node_tilt,l_sum+r_sum+root.val)

并不是简单的计算两个结点的值的绝对值,而是将两个结点的子结点的和求绝对值差,比如说下面这个例子:

它计算的过程应该是(5 - 0) + (4 - 0) + ((3 + 5) - (2 + 4)) ,最终的结果是11,所以像我之前没有计算当前结点的两个子结点的和都是错的。

class Solution(object):
count = 0
def recursive(self, root):
if root == None:
return 0
if root.left and root.right:
self.count += abs(root.left.val - root.right.val)
elif root.left:
self.count += root.left.val
elif root.right:
self.count += root.right.val
self.recursive(root.left)
self.recursive(root.right)
def findTilt(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
self.recursive(root)
return self.count

Python LeetCode的更多相关文章

  1. python leetcode 1

    开始刷 leetcode, 简单笔记下自己的答案, 目标十一结束之前搞定所有题目. 提高一个要求, 所有的答案执行效率必须要超过 90% 的 python 答题者. 1. Two Sum. class ...

  2. python leetcode 日记 --Contains Duplicate II --219

    题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...

  3. python LeetCode 两数相除

    近一个月一直在写业务,空闲时间刷刷leetcode,刷题过程中遇到了一道比较有意思的题目,和大家分享. 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使 ...

  4. python leetcode 日记 --Contains Duplicate --217

    题目 Given an array of integers, find if the array contains any duplicates. Your function should retur ...

  5. Python [Leetcode 345]Reverse Vowels of a String

    题目描述: Write a function that takes a string as input and reverse only the vowels of a string. Example ...

  6. python leetcode 颠倒二进制数

    我的做法,,这个题在于必须补0 def reverseBits(n): num=32-len(bin(n)[2:]) m = bin(n)[2:][::-1] if num > 0: for i ...

  7. python(leetcode)-重复元素算法题

    leetcode初级算法 问题描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 该问题表述非常简单 ...

  8. python(leetcode)-344反转字符串

    编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 你可以 ...

  9. python(leetcode)-48旋转图像

    给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...

随机推荐

  1. cordova.js的坑

    最近在使用cordova开发app,一开始只引用了cordova.js,cordova通过function exec(){}来链接本地和H5,之前代码被下载到了本地,在苹果和android上都能实现功 ...

  2. PS-前端切图教程(切jpg图和切png图)

    微微一运功,把家底都抖出来了. 不过,作为一个设计出身的前端来说,摸ps就和摸键盘一样了 所以可能教程中还是有没用过ps的人看不懂的地方, 欢迎加群讨论:613512106... ---------- ...

  3. 网站优化html关键词代码使用

    html的meta标签 .meta标签是内嵌在你网页中的特殊html标签,包含着你有关于你网页的一些隐藏信息.Meat标签的作用是向搜索引擎解释你的网页是有关哪方面信息的.对于高级的搜索引擎来说,ht ...

  4. 【LeetCode】87. Scramble String

    题目: Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty subs ...

  5. VI修改文件

    找到路径   vi  文件名    i  添加或修改 esc   :  wq  保存退出     --------------------------------------------------- ...

  6. windows平台python 2.7环境编译安装zbar

    最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图 ...

  7. Struts 框架 之 文件上传下载案例

    Struts 框架 文件上传 1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本) 导jar包:

  8. 使用C#创建简单的WCF服务

    一.开发环境 操作系统:Windows 10 开发环境:VS2015 编程语言:C# IIS版本:10.0.0.0 二.添加WCF服务.Internet Information Services(II ...

  9. Vulkan Tutorial 28 Depth buffering

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 到目前为止,我们所使用的几何图形为3D,但仍然完全扁平的. ...

  10. 自定义VS程序异常处理及调试Dump文件(一)

    自定义VS程序异常处理及调试Dump文件(一) 1. Dump文件 1. Dump文件介绍 Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀.dump文件是进程在内存中的镜像文件 ...