题目:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路一:
BFS
代码:
class Solution:
def TreeDepth(self, pRoot):
if not pRoot:
return 0
queue = []
count, depth, nextcount = 0, 0, 1
queue.append(pRoot)
while queue:
p = queue.pop(0)
count += 1
if p.left: queue.append(p.left)
if p.right: queue.append(p.right)
if count == nextcount:
nextcount = len(queue)
count = 0
depth += 1
return depth
思路二:
DFS
代码:
class Solution:
def TreeDepth(self, pRoot):
def dfs(root, count):
global depth
if not root.left and not root.right:
depth = max(depth, count)
return
count += 1
depth = max(depth, count)
if root.left: dfs(root.left, count)
if root.right: dfs(root.right, count)
if not pRoot: return 0
global depth
count, depth = 1, 0
dfs(pRoot, count)
return depth
简化版:
class Solution:
def TreeDepth(self, pRoot):
if not pRoot: return 0
left = self.TreeDepth(pRoot.left)
right = self.TreeDepth(pRoot.right)
return max(left, right)+1