您的位置:首页 > 其它

开荒新系列之LeetCode: 004-Same Tree

2015-12-28 00:26 357 查看

开荒新系列之LeetCode: NO.004 Same Tree

在广图,连刷两道题好了。

题目大意

比较两个二叉树的异同,只有结构完全相同,且对应结点的值也相同的二叉树,才是完全一致的。

基本思路

啊,我的DFS和BFS,你们又要出现啦。

到底用哪种呢?

感觉更偏好于DFS一些。因为大部分二叉树在构造的时候都会偏向于平衡结构,因而BFS在抵达较深层次的时候,会使其任务队列过于庞大(最多需要2^h的大小,h为深度),对于平衡二叉树,DFS仅需要约2*h的大小的栈容量,当然如果是单边的二叉树,那为什么不用链表呢。

我的解法

写离线测试好麻烦,得想一想怎么构思一个离线测试集了

# 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 dfs(self, root):
stack = [root]
while stack != []:
node_now = stack.pop()
yield node_now
# 采用右子树探寻
if node_now.left != None:
stack.append(node_now.left)
if node_now.right!= None:
stack.append(node_now.right)

def xor(self, a, b):
if a and b != None:
return (a or b) and (not a and not b)
if a == None and b == None:
return False
return True

def check(self,a, b):
if (a.val == b.val) and (self.xor(a.left, b.left) == False) and (self.xor(a.right, b.right) == False):
return True
return False

def isSameTree(self, p, q):
# 对空树处理
if (p and q)== None:
if (p or q) != None:
return False
return True

gtr_p = self.dfs(p)
gtr_q = self.dfs(q)
result = True
# 比较长度一致部分的结果
try:
while 1:
node_now_p = gtr_p.next()
node_now_q = gtr_q.next()
if not self.check(node_now_p, node_now_q):
return False#,node_now_p.val, node_now_q.val, self.check(node_now_p, node_now_q)
except: # stop Iteration....
return True #,node_now_p.val, node_now_q.val, self.check(node_now_p, node_now_q)


中间有不少语法错误,忘记怎么用了。

另外这个代码的问题是速度比较慢。

我猜测整个判断结构应该可以优化一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: