题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
方法一:
每次一做到二叉树,总会情不自禁的想用递归算法。刚开始主要是忽略了初始条件,当没有根结点时,算法返回为0;只有一个根结点时,算法返回为1。然后要输出左子树和右子树中深度较大的一棵树的继续迭代。
class Solution:
def TreeDepth(self, pRoot):
# write code here
if not pRoot:
return 0
dept = 0
while pRoot:
dept += 1
if self.TreeDepth(pRoot.left) > self.TreeDepth(pRoot.right):
pRoot = pRoot.left
else:
pRoot = pRoot.right
return dept
改进的递归算法:
直接三行就能解决的事情...比较大小的部分使用max函数
class Solution:
def TreeDepth(self, pRoot):
# write code here
if not pRoot:
return 0
left = self.TreeDepth(pRoot.left)
right = self.TreeDepth(pRoot.right)
return max(left, right) + 1
方法二:
对二叉树按层进行遍历。创建一个列表,用于存放每一层中的所有结点,在每层中,先将原有结点逐个弹出,将其子结点分别加入到列表尾部。(类似于队列的结构)
class Solution:
def TreeDepth(self, pRoot):
# write code here
if not pRoot:
return 0
level = []
level.append(pRoot)
dept = 0
while level:
dept += 1
for i in range(len(level)):
node = level.pop(0)
if node.left:
level.append(node.left)
if node.right:
level.append(node.right)
return dept