Leetcode刷题记录——101. 对称二叉树

在这里插入图片描述
07.19更新

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        if root == None or (root.left == None and root.right == None):
            return True
        if (root.left != None and root.right == None) or (root.left == None and root.right != None):
            return False

        return True if self.isSymTree(root.left,root.right)  else False  

    def isSymTree(self,a,b):
        if a == None and b == None:
            return True
        if (a == None  and  b != None) or (a != None and b == None):
            return False
        return True if a.val == b.val and self.isSymTree(a.left,b.right) and self.isSymTree(a.right,b.left) else False

思路:常规的先序遍历,其顺序为 根-左-右
我们仿照其顺序,定义一种先序遍历-β方法,其顺序为根-右-左
假设一个树为对称二叉树,那么常规先序遍历方法和先序遍历-β方法的遍历结果应该是相同的
本体采用这种思路,将一棵树的上述两种遍历结果进行对比,若相同,则为对称二叉树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def __init__(self):
        self.leftlist = []
        self.rightlist = []
    def isSymmetric(self, root: TreeNode) -> bool:
        if root is None:
            return True
        elif root.left is None and root.right is None:
            return True
        elif root.left is None or root.right is None:
            return False
        self.root_left_right(root)
        self.root_right_left(root)
        return True if self.leftlist == self.rightlist else False

    def root_left_right(self,node):#常规先序遍历
        if node is None:
            self.leftlist.append('x')
        else:
            self.leftlist.append(node.val)
            self.root_left_right(node.left)
            self.root_left_right(node.right)
    def root_right_left(self,node):#先序-beta
        if node is None:
            self.rightlist.append('x')
        else:
            self.rightlist.append(node.val)
            self.root_right_left(node.right)
            self.root_right_left(node.left)

            


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值