• 【leetcode】951. Flip Equivalent Binary Trees


    题目如下:

    For a binary tree T, we can define a flip operation as follows: choose any node, and swap the left and right child subtrees.

    A binary tree X is flip equivalent to a binary tree Y if and only if we can make X equal to Y after some number of flip operations.

    Write a function that determines whether two binary trees are flip equivalent.  The trees are given by root nodes root1 and root2.

    Example 1:

    Input: root1 = [1,2,3,4,5,6,null,null,null,7,8], root2 = [1,3,2,null,6,4,5,null,null,null,null,8,7]
    Output: true
    Explanation: We flipped at nodes with values 1, 3, and 5.
    Flipped Trees Diagram
    

    Note:

    1. Each tree will have at most 100 nodes.
    2. Each value in each tree will be a unique integer in the range [0, 99].

    解题思路:从两个根节点开始分别同步遍历两棵树,如果左右子树相同则表示不用交换;如果左右互相等于对方则交换;否则表示无法交换。

    代码如下:

    # 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):
        res = True
        def verify(self,node1,node2):
            leftV1 = None if node1.left == None else node1.left.val
            leftV2 = None if node2.left == None else node2.left.val
            rightV1 = None if node1.right == None else node1.right.val
            rightV2 = None if node2.right == None else node2.right.val
            if leftV1 == leftV2 and rightV1 == rightV2:
                return 0
            elif leftV1 == rightV2 and rightV1 == leftV2:
                return 1
            else:
                return -1
        def traverse(self,node1,node2):
            if node1 == None or node2 == None:
                return
            ret = self.verify(node1,node2)
            if ret == 0:
                self.traverse(node1.left,node2.left)
                self.traverse(node1.right, node2.right)
            elif ret == 1:
                node2.left,node2.right = node2.right,node2.left
                self.traverse(node1.left, node2.left)
                self.traverse(node1.right, node2.right)
            else:
                self.res = False
    
        def flipEquiv(self, root1, root2):
            """
            :type root1: TreeNode
            :type root2: TreeNode
            :rtype: bool
            """
            if (root1 == None) ^ (root2 == None):
                return False
            self.res = True
            self.traverse(root1,root2)
            return self.res
  • 相关阅读:
    跟着太白老师学python 10day 函数的动态参数 *args, **kwargs, 形参的位置顺序
    IO 流之字符流的缓冲区
    Java IO异常处理方式
    Java IO 流
    Java 其他对象的 API
    Java 集合框架之 JDK 1.5 新特性
    Java 集合框架工具类
    Java 集合框架之 Map
    Java 集合框架查阅技巧
    Java 集合框架之泛型
  • 原文地址:https://www.cnblogs.com/seyjs/p/10084253.html
Copyright © 2020-2023  润新知