BinaryTree函数 - 复杂性

时间:2013-02-19 10:25:16

标签: binary-tree

我只是写下了不同的功能,这是可以在二叉树上完成的操作。

我想知道这个函数的运行时间是什么,试图摆脱它们:

  getMaxDepth(Tree) //What can be the time complexity here? 
    if Tree.root = NIL return 0 // BaseCase
    leftDepth := 1 + getMaxDepth(Tree.root.left)
    rightDepth := 1 + getMaxDepth(Tree.root.right)
    if leftDepth > rightDepth then return leftDepth;
    else return rightDepth;


  internalNodeCount(Node n) // And here?
    if isLeaf(n) then return 0
    return 1 + internalNodeCount(n.left) + internalNodeCount(n.right)

  isLeaf(Node n)
    return n=NIL OR (n.left=NIL AND n.right=nil);

GetMaxDepth我假设时间复杂度为O(n),因为我需要递归遍历整个树的节点....什么可以是一个很好的解释?

InternalNodeCount我认为出于同样的原因,它与O(n)的复杂度相同.....

1 个答案:

答案 0 :(得分:0)

根据我的理解,您似乎正在寻找一些证据。

对于getMaxDepth,这里是解释:

T(1) = c1
T(n) = T(k) + T(n-k-1) + c2
where
T(n) = Time to process tree of n nodes 
n = number of nodes
k = nodes in left subtree
n-k-1 = nodes in right subtree
c1, c2 = constants (not dependent upon n) 
(Time to calculate the depth of the tree from given left and right subtree depth)

同样可以应用于internalNode,除了容量会有所不同。