我是否认为这是O(n)?递归我真的很糟糕。有人可以确认,或向我解释?查找树木和递归的时间复杂度
Counter(a)
if hasLeft(a)
return Counter(left(a) + Counter (right(a))
else
return 1
基本上,如果没有在树中的左节点,则返回0。如果有剩下的笔记,它返回1
谢谢!
我是否认为这是O(n)?递归我真的很糟糕。有人可以确认,或向我解释?查找树木和递归的时间复杂度
Counter(a)
if hasLeft(a)
return Counter(left(a) + Counter (right(a))
else
return 1
基本上,如果没有在树中的左节点,则返回0。如果有剩下的笔记,它返回1
谢谢!
你的代码不会做广告。你说你想让它返回1,如果有一个左节点,如果没有左节点,则返回0。但是你的代码是:
Counter(a)
if hasLeft(a)
return Counter(left(a)) + Counter(right(a))
else
return 1
如果在根上没有左节点,但它不检查树的其余部分,则返回1。这段代码不会检查整个树,而是会停留在没有左节点的第一级。
你真的想做什么?
他的问题是关于运行时间,而不是代码是否正确,这个答案可以是一个评论。null checking,... are another notes。 –
@Saeed:我明白,但这很难给予th运行时间不适用的代码。 –
你可以假设这是一个伪代码,它可以在你没有推荐的情况下工作(但是他应该添加空的检查),但可能并不是他想要的,但它是一种算法并且有运行时间。 –
如果您的意图是基于没有左节点/左节点确实返回0或1,您可以非常容易地创建一个O(1)例程并且不需要递归。除此之外,你真的不清楚你想要完成什么,但感觉就像你的代码示例有缺陷(如果hasLeft(a)....基于左(a)递归...当你已经确定没有左分支 – mah
对不起 - 我修正了它,我并不是这样的! 我只是试图了解递归和时间复杂度,使用这个特定的代码 – Kris