假设你加入成为公司的一个部门的负责人,想知道是谁在该部门工作的总人数。此外,还有2名负责人,一名负责工程,另一名负责业务。现在,为了统计人数,你可以到办公室去计数。 (但是这很乏味,除此之外,作为部门负责人有什么意义)。
或者,你可以做的是要求你的工程负责人找出在他下面工作的人,说x
,并要求业务负责人找出在他下面工作的人,说y
。所以,在该部门工作的人员总数是x+y+1
(1是给你的)。
现在,您可以假设工程负责人将拥有2名主管,并要求他们了解每位主管正在监督的人数。因此,工程团队的总人数为people_under_supervisor_1 + people_under_supervisor_2 + 1
(工程负责人为1人)。等等。
同样,您可以假设一个类似的流程,涉及通过业务负责人查找业务部门中的人员数量。
这代码做同样的事情,找到左子树的大小,发现右子树的大小,加1为当前节点。 这是算法的工作原理。我希望这个比喻有帮助。
现在,关于“多少更多的内存保存在变量和方法内声明的而不是方法之外。” 其实当你在声明一个局部变量更多的内存使用递归函数。在声明任何局部变量时,将在堆栈中分配一个内存位置,并且该局部变量的作用域完成之前,该内存位置不能用于其他目的。因此,当下一个函数被称为size(current.getLeft())
时,所有变量都保留在堆栈中,并且通过调用size(current.getLeft())
创建局部变量size
的新内存位置。只要该函数仍未返回结果,size
的实例就保留在内存中。
看看这个视频,https://www.youtube.com/watch?v=_8-ht2AKyH4得到一个更清晰的堆栈的想法。