• 剑指offer 面试55题


    面试55题:

    题目:二叉树的深度

    题:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

    解题思路:

    ①如果一棵树只有一个节点,它的深度为1

    ②如果根节点只有左子树而没有右子树,那么树的深度是左子树的深度加1

    同样,如果根节点只有右子树而没有左子树,那么树的深度是右子树的深度加1

    既有右子树又有左子树时,数的深度是左子树和右子树深度较大者加1

    利用递归很容易实现上述思路:

    解题代码:

    # -*- coding:utf-8 -*-
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    class Solution:
        def TreeDepth(self, pRoot):
            # write code here
            if pRoot is None:
                return 0
            left = self.TreeDepth(pRoot.left)
            right = self.TreeDepth(pRoot.right)
            return max(left,right)+1

     

    题目拓展:平衡二叉树

    输入一棵二叉树,判断该二叉树是否是平衡二叉树。

    解题代码:

    # -*- coding:utf-8 -*-
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    class Solution:  
        def TreeDepth(self, pRoot):
            if pRoot is None:
                return 0
            left = self.TreeDepth(pRoot.left)
            right = self.TreeDepth(pRoot.right)
            return max(left,right)+1
        
        def IsBalanced_Solution(self, pRoot):
            # write code here
            if pRoot is None:
                return True
            left = self.TreeDepth(pRoot.left)
            right = self.TreeDepth(pRoot.right)
            diff = left - right
            if diff< -1 or diff >1:
                return False
            return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/yanmk/p/9163021.html
Copyright © 2020-2023  润新知