题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路
思路1:递归实现。递归的向左右两边搜索。当到达空的时候返回0,那么空结点上面就是底层的叶子结点了,然后递归的返回左右最大值再加一(每次返回意味着返回了一层,所以深度加一)。
思路2:非递归实现。用宽度优先搜索对树进行便利。把根节点加入队列,队列里保存同一层的结点。每一次探索队列里的全部的结点,把结点的左右子树加入一个current level中,下一步把这个current level的结点传给队列。
代码
递归实现
def TreeDepth(self, pRoot):
if pRoot is None:
return 0
return max(self.TreeDepth(pRoot.left),self.TreeDepth(pRoot.right))+1
非递归实现
def TreeDepth(self, pRoot):
if pRoot is None:
return 0
q = []
q.append(pRoot)
current_level=[]
count = 1 #root已经放入,默认深度为1
while q:
if len(current_level)>0: #说明当前层是有结点的,那么深度加一
count+=1
current_level = []
for node in q:
if node.left:
current_level.append(node.left)
if node.right:
current_level.append(node.right)
q = current_level
return count