# -*-coding:utf-8-*- __author__ = 'LL_YING' # 二叉树的深度为根节点到最远子节点的距离 ''' 可采用:广度优先搜索(BFS:Breadth First Search),又名宽度优先搜索和 深度优先搜索(DFS:Depth First Search)两种: 广度优先搜索:属于一种盲目的搜索算法,目的是系统的展开并检查图中的所 有结果。换句话说,它并不会考虑结果可能的位置,彻底搜索整个图,直到找 到结果为止。 深度优先搜索:每次深度搜索的结果必然是图的一个连通分量。且可以从多节 点发起。PS:将每个节点在深度优先搜索中“结束时间”排序(具体方法是:创 建一个list,然后在每个节点的相邻节点都被访问的情况下,将节点加入到list 结尾,然后逆转整个链表。),这样就得到了所谓的拓扑排序。 ''' # Recursively(递归)DFS # Definition for a binary tree node class treeNode: def __init__(self, x): self.value = x self.left = None self.right = None class Solution_1: def maxDepth(self, root): ''' :param root:treeNode :return:integer ''' if not root: return 0 return 1+max(self.maxDepth(root.left), self.maxDepth(root.right)) # BFS+deque class Solution_2: def maxDepth(self, root): if not root: return 0 from collections import deque deque = deque([(root, 1)]) while deque: curr, val = deque.popleft() if not curr.left and not curr.right and not deque: return val if curr.left: deque.append((curr.left, val+1)) if curr.right: deque.append((curr.right, val+1)) # DFS with explicit stack class Solution_3: def maxDepth(self, root): res = 0 stack = [(root, 0)] while stack: node, level = stack.pop() if not node: res = max(res, level) else: stack.append(node.right, level+1) stack.append(node.left, level+1) return res ''' from collections import deque deque(双端队列)提供更全面的数列操作,可以从左右两边操作数列 Python的逻辑操作符: 1、and : x and y 如果 x 为真,则 y 决定结果,返回 y ;如果 x 为假,x 决定了结果为假,返回 x。 即,x,y同时为真则为真,有一个为假则为假。 2、or : x or y,与and类似,x,y同时为假时结果为假,有一个为真则为真 3、not : 返回表达式结果的“相反的值”。如果表达式结果为真,则返回false; 如果表达式结果为假,则返回true。 '''
二叉树的深度
最新推荐文章于 2024-04-28 01:52:29 发布