[剑指offer]二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
示例1
输入
{1,2,3,4,5,#,6,#,#,7}
返回值
4
使用递归遍历(分治法): 每一层递归返回当前子树中的最长路径。
# -*- 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 not pRoot:
return 0
lval = self.TreeDepth(pRoot.left)
rval = self.TreeDepth(pRoot.right)
return max(lval,rval)+1
使用层次遍历,求最大深度可用遍历
求最大深度,可以用队列先进先出的特性,在对二叉树进行层序优先遍历的时候,使用过该特性。此题在层序遍历的基础上增加了对每一层的判断。因此使用for循环将生成的同一层数据出栈后,计数+1。当队列中为空时,代表二叉树遍历完成。则此时的count则为二叉树的深度。
class Solution:
def TreeDepth(self, pRoot):
# write code here
count = 0
if not pRoot:
return count
stack = [pRoot]
while stack:
tmp = []
# 记录同一层结点的个数
n = len(stack)
for i in range(n):
temp = stack.pop(0) # 先进先出
if temp.left:
stack.append(temp.left)
if temp.right:
stack.append(temp.right)
count += 1
return count