leetcode_101 发表于 2016-10-31 | 分类于 leetcode Symmetric Tree题目戳这 题意给定一颗二叉树,判定它是否为对称的二叉树。 解法从题目中可以看出,对称数的定义就是根节点的左子树等于右子树,利用这个特性我们就可以写出递归和非递归两种解法。 代码递归 123456789101112131415161718192021222324# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object): def dfs(self, lt, rt): if not lt and not rt: return True if (lt and not rt) or (rt and not lt) or (lt.val != rt.val): return False # 条件不成立 return self.dfs(lt.left,rt.right) and self.dfs(lt.right, rt.left) # 递归判断左子树和右子树是否相等 pass def isSymmetric(self, root): """ :type root: TreeNode :rtype: bool """ if not root: return True return self.dfs(root.left, root.right) # 分割左右子树 非递归 123456789101112131415161718192021222324252627282930313233343536# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneimport Queueclass Solution(object): def isSymmetric(self, root): """ :type root: TreeNode :rtype: bool """ if not root: return True q = Queue.Queue() q.put(root.left) q.put(root.right) while not q.empty(): p1 = q.get() p2 = q.get() if not p1 and not p2: continue if not p1 or not p2: return False if p1.val != p2.val: return False q.put(p1.left) # 分别放入左子树和右子树 q.put(p2.right) q.put(p1.right) # 分别放入右子树和左子树 q.put(p2.left) return True