leetcode (剑指offer)面试题28. 对称的二叉树(python)

在这里插入图片描述
题解:
两种方法进行求解,一种是递归法(DFS),一种是迭代法(BFS)
递归法:
递归法的思想在于一个结点的左右子树是对应的,因此设置两条路径(两个指针)访问,来看左右子树是否对应相等。
递归的终止条件:

  1. 如果两个结点都为None,返回True
  2. 如果一个为None, 一个不是,返回False
  3. 如果对应值不相等,返回False
class Solution:
    def isSymmetric(self, root):
    	if not root:
    		return True

    	def dfs_double(A1,A2):

    		if A1 == None and A2 == None:
    			return True

    		if A1 == None or A2 == None:
    			return False
    		if A1.val != A2.val:
    			return False

    		return (dfs_double(A1.left,A2.right)
    		and dfs_double(A1.right,A2.left))

    	de = dfs_double(root.left,root.right)
    	return de

迭代法:
迭代法的思想与递归法类似,但是这次是设置两个队列,一个队列从左结点开始访问,一个队列从右结点开始访问,来看对应值是否相等。
此题的思想借用对称二叉树的性质。(即这颗树交换左右结点之后与原树相同)

class Solution:
    def isSymmetric(self, root):

    	if not root:
    		return True

    	queque = [root]
    	queque1 = [root]#双枝

    	while (queque and queque1):

    		tmp = queque.pop(0)
    		tmp1 = queque1.pop(0)
    		# print(tmp.val)
    		# print('tmp1 %d' % tmp1.val)
    		if (tmp == None and tmp1 != None) or (tmp != None and tmp1 == None):
    			return False
    		if tmp == None and tmp1 == None:
    			continue
    		elif tmp.val != tmp1.val:
    			return False

    		if queque == None or queque1 == None:
    			return False
    		print(tmp)
    		print('tmp1, %d' % tmp1)
    		
    		queque.append(tmp.left)

    		
    		queque.append(tmp.right)

    		

    		queque1.append(tmp1.right)

    		

    		queque1.append(tmp1.left)

    	return True
发布了100 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/cy_believ/article/details/104506951