我正在通过Gayle McDowell编写的“Cracking the coding interview”一书,并且遇到了一个有趣的递归算法,它将平衡二叉搜索树中所有节点的值相加。以下递归算法的运行时间?
int sum(Node node) {
if (node == null) {
return 0;
}
return sum(node.left) + node.value + sum(node.right);
}
现在盖尔说,运行时间为O(N),我发现,我看不出这个算法将永远结束混乱。对于一个给定的节点,当node.left在第一次调用中传递给sum时,然后node.right因此在第二次调用中传递给sum时,是不是第二次计算sum(节点)的算法?这个过程不会永远持续下去吗?对于递归算法,我还是个新手,所以它可能不是非常直观。
干杯!
'node.left'是'node'的左边子节点,'node.right'是正确的子节点。 'sum(node)'递归地计算左侧子节点的总和,然后右侧子节点并将它们加在一起(用'节点的值) –