剑指offer-python刷题-二叉树的深度
发布日期:2021-07-28 12:03:13 浏览次数:3 分类:技术文章

本文共 1314 字,大约阅读时间需要 4 分钟。

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


方法一:

每次一做到二叉树,总会情不自禁的想用递归算法。刚开始主要是忽略了初始条件,当没有根结点时,算法返回为0;只有一个根结点时,算法返回为1。然后要输出左子树和右子树中深度较大的一棵树的继续迭代。

class Solution:    def TreeDepth(self, pRoot):        # write code here        if not pRoot:            return 0        dept = 0        while pRoot:            dept += 1            if self.TreeDepth(pRoot.left) > self.TreeDepth(pRoot.right):                pRoot = pRoot.left            else:                pRoot = pRoot.right        return dept

改进的递归算法:

直接三行就能解决的事情...比较大小的部分使用max函数

class Solution:    def TreeDepth(self, pRoot):        # write code here        if not pRoot:            return 0        left = self.TreeDepth(pRoot.left)        right = self.TreeDepth(pRoot.right)        return max(left, right) + 1

方法二:

对二叉树按层进行遍历。创建一个列表,用于存放每一层中的所有结点,在每层中,先将原有结点逐个弹出,将其子结点分别加入到列表尾部。(类似于队列的结构)

class Solution:    def TreeDepth(self, pRoot):        # write code here        if not pRoot:            return 0        level = []        level.append(pRoot)        dept = 0        while level:            dept += 1            for i in range(len(level)):                node = level.pop(0)                if node.left:                    level.append(node.left)                if node.right:                    level.append(node.right)        return dept

 

转载地址:https://blog.csdn.net/sinat_42437278/article/details/117704357 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:剑指offer-python刷题-平衡二叉树
下一篇:剑指offer-python刷题-两个链表的第一个公共结点

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月20日 04时43分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章