python剑指offer系列通过求二叉树的深度来理解递归


二叉树如下所示


递归求二叉树的深度代码如下:

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次比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值