喵了个咪。
首先呢。作为一个判断两颗树是否相等的题目。我们是不能判断出两颗Treenode类型的数据是否相等的。。(不然直接判断p 是不是等于q不就好了??
所以写出p.left == q.left 和p.right == q.right 这种判断语句也是该打! 啪!
然后呢。本来觉得p 、q递归的时候传None进去也没什么嘛 毕竟测试数据也有[ ]的
但是一直出现
Line 17: AttributeError: 'NoneType' object has no attribute 'val'
这种bug。开始自我怀疑就拼命写if 写到天荒地老。。( 其实if 之后的判断句写成 if 或者elif其实没差吧? 毕竟我每个if里面都有些return呐 (((不过感觉优雅的代码还是应该写成elif吧?嗯此处待考证。
可惜if写了一大堆。还是run不过这个bug。
然后看了下判断句。 难道程序不能懂我??
if p or q is None :
↑此处想表达的是“如果p或者q中有一个是None”
但是果然女人和编译器是不同的生物呐(雾)。
一言不合。赶紧加个括号压压惊——
if (p is None) or (q is None) :
○( ^皿^)っHiahia然后就搞定啦…(嘚瑟个屁啊明明自己逻辑差劲 白瞎了看剧的大好时光( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)
昂。这个逻辑bug解决后那些if都可以删了~~ 最后用一个六行(其实删掉else还可以更少的。。但是还是优雅点吧~~)递归A掉啦~
# 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 isSameTree(self, p, q):
"""
:type p: TreeNode
:type q: TreeNode
:rtype: bool
"""
if (p is None) or (q is None) :
return (p is None)and(q is None)
elif p.val !=q.val:
return False
else:
return (self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right))
其实非递归的话感觉可以对比中序 先序遍历结果之类的方法
奈何我好像 已经忘了怎么写非递归遍历了。。。。。。。。。。。。。。。。(写起来也不一定比这个快嘛!嗯。相信自己。
本来觉得自己智商不够掌握递归啊。但是当你(记不住)写不出非递归算法的时候 递归还是比较好写的 毕竟有个自带框架吧。。。
以上。~