leetcode(101):Symmetric Tree

xiaoxiao2021-02-28  49

题目:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

对于题目的分析:这个题目要求判断给定的这棵树是不是关于根节点对称。对于根节点而言,首先需要判断根节点是不是为None形式,如果为None形式,则肯定是对称的,然后判断根节点的二个子树的节点情况,使左右子树关于根节点对称,则再判断在原来判断二颗树是否相同的基础上加以修改,也就是左子树的左节点与右子树的右节点,左子树的右节点与右子树的左节点来进行判断。 python代码如下:

# 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 isSymmetric(self, root): """ :type root: TreeNode :rtype: bool """ if root == None: return True l = root.left r = root.right return self.isSame(l, r) def isSame(self, l, r): if l and r: return l.val == r.val and self.isSame(l.left, r.right) and self.isSame(l.right, r.left) return l is r

大佬的代码如下: recursively递归的解法,因为树的结构是递归的,所以用递归的方法来求解会比较容易书写。

class Solution: def isSymmetric(self, root): if root is None: return True else: return self.isMirror(root.left, root.right) def isMirror(self, left, right): if left is None and right is None: return True if left is None or right is None: return False if left.val == right.val: outPair = self.isMirror(left.left, right.right) inPiar = self.isMirror(left.right, right.left) return outPair and inPiar else: return False

好吧,我跟大佬的思想是一致的,还是很开心的。递归是用栈来实现的,迭代大佬们也是用栈来实现的。

迭代的解法:

class Solution2: def isSymmetric(self, root): if root is None: return True stack = [[root.left, root.right]] while len(stack) > 0: pair = stack.pop(0) left = pair[0] right = pair[1] if left is None and right is None: continue if left is None or right is None: return False if left.val == right.val: stack.insert(0, [left.left, right.right]) stack.insert(0, [left.right, right.left]) else: return False return True

对于递归而言,也是利用了栈的结构,其实跟递归的求解是一致的,只是说不同的表现手法,也就是利用了一对一对的入栈出栈来进行处理。

此题得到的思考: 1,在做题的时候,要思考模式,自己之前思考过什么模式,如何应用。 2,能简化书写的要简化书写,但逻辑不能简化。 3,要注意,对于树而言,比较顺畅的是递归的做法,但如果递归的做法做不出来的时候,一定要换一条路子走啊,采用迭代的方法,利用list来进行处理,完成操作。。当然也有stack,queue等,但其实说实话,它们也都是披着老虎面具的羊羔子,实质上还是list。处理问题要灵活多变。

转载请注明原文地址: https://www.6miu.com/read-2631705.html

最新回复(0)