美文网首页
LeetCode | 算法:求二叉树是否相同&树的最大深

LeetCode | 算法:求二叉树是否相同&树的最大深

作者: 松鼠的读书笔记 | 来源:发表于2019-01-03 17:32 被阅读17次

    100. Given two binary trees, write a function to check if they are the same or not.

    Two binary trees are considered the same if they are structurally identical and the nodes have the same value.

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isSameTree(self, p, q):
            """
            :type p: TreeNode
            :type q: TreeNode
            :rtype: bool
            """
            # 递归出口
            if not p and not q:     #p,q为空
                return True
            
            elif not p or not q:    #p,q有一个为空,一个不为空
                return False
            
            elif p.val!=q.val:      #p,q均不空,但是值不相等
                return False         
            
            else:
                return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
            
    

    104. Given a binary tree, find its maximum depth.

    The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
    Note: A leaf is a node with no children.

    算法思想:采用宽度优先搜索,一层层处理,在处理当前层时,最大深度+1,将队列中所有元素出队,并将这些元素的孩子节点全部入队,以此循环,直到队列为空。

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def maxDepth(self, root):
            """
            :type root: TreeNode
            :rtype: int
            """
            if not root:
                return 0
            
            max_depth = 0
            que = collections.deque()
            que.append(root)
            
            while que:
                max_depth += 1
                num_children = len(que)
                for _ in range(num_children):
                    node = que.popleft()
                    if node.left:
                        que.append(node.left)
                    if node.right:
                        que.append(node.right)
            
            return max_depth
    

    相关文章

      网友评论

          本文标题:LeetCode | 算法:求二叉树是否相同&树的最大深

          本文链接:https://www.haomeiwen.com/subject/cztqrqtx.html