首页 > 其他 > 详细

深度遍历DFS---树

时间:2019-04-14 21:39:41      阅读:140      评论:0      收藏:0      [点我收藏+]

一、二叉树的深度

题目:

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7]

    3
   /   9  20
    /     15   7

返回它的最大深度 3 。

思路1:递归

  边界:一旦root == None则返回深度为0。否则进入递归子问题。

  递归子问题:max(左树深度,右树深度)+ 1

  

def dfs(root):
    #边界
    if not root:
        return 0
    #递归子问题
    else:
        left = dfs(root.left)
        right = dfs(root.right)
        return max(left,right)+1


class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.left.right = TreeNode(5)
height = dfs(root)

思路2:深度遍历dfs

  边界:一旦root == None则记录深度大小tmp,判断是否大于res(结果)。否则进入递归子问题。

  递归子问题:将当前深度tmp + 1,传入左子树和右子树。

代码:

#全局变量
res = 0

def dfs(root,tmp):
    global res
    ##边界
    if not root:
        res = max(res,tmp)
        return
    ###递归子问题
    else:
        dfs(root.left,tmp+1)
        dfs(root.right,tmp+1)


class TreeNode(object):
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.left.right = TreeNode(5)

dfs(root,0)
print(res)

 

二、

 

  

 

  

 

深度遍历DFS---树

原文:https://www.cnblogs.com/Lee-yl/p/10707099.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!