二叉树如下所示
递归求二叉树的深度代码如下:
class Solution:
def TreeDepth(self, pRoot):
if pRoot == None:
return 0
left ,right = self.TreeDepth(pRoot.left) , self.TreeDepth(pRoot.right)
print(lefts,rights)
return max(left,right) + 1
首先如何理解递归,参考http://blog.csdn.net/sinat_27088253/article/details/51954398的说法:
所谓递归可以分为两部分来理解:“递”和“归”。
“递”指按照代码执行顺序执行,这个和我们正常的思维一致不难理解。但有一点需要注意的是,在“递”的同时会把节点按照访问的顺序逐次压入到一个堆栈中。
“归”是指“递”进行到尽头时,开始根据“递”的过程中形成的堆栈进行出栈,最终得到结果。
对于二叉树深度求解
我们首先传进去的node是1,根据程序执行过程,我们可以知道在执行到一个阶段的尽头时,将会形成这样一个堆栈
由于4没有左右子树,这样第一个递归走到了尽头,此时4出栈,return 1,然后进入2节点,2节点的左子数已经遍历此时则需要遍历右子数,此时5进栈,由于5有左右子数,则依次6先进栈,6进栈后为第二个递归尽头,此时return 1,6无左右节点,6出栈,此时又进入5节点,遍历5的右子树,即7进栈,7没有左右子树,则return 1,此时5的左右子树则遍历完成,return max(1,1) +1 ,则return 2,然后2出栈,return max(1,2) +1 = 3,进入节点1 ,遍历1的右子树,3入栈,且无做右子树,return 1,最终回到节点1,return max(3,1) + 1 = 4
则最后求出二叉树深度为4
下图则是程序运行图,可以看出总共进行了7次比较