【问题标题】:Time complexity of cloning a binary tree克隆二叉树的时间复杂度
【发布时间】:2020-08-24 03:17:13
【问题描述】:

我想知道这个克隆二叉树的代码的时间复杂度是否为 O(n)? 如果它的 O(n) 你能解释为什么吗? 如果没有,你能建议一种方法在时间复杂度 O(n) 中做到这一点吗?

public TreeNode cloneTree(TreeNode root) {
    if (root == null) return null;
    TreeNode newNode = new TreeNode(root.val);
    newNode.left = cloneTree(root.left);
    newNode.right = cloneTree(root.right);
    return newNode;
} 

【问题讨论】:

标签: data-structures time-complexity binary-tree big-o clone


【解决方案1】:

你可能认为它是 O(2n) 因为两个递归子调用,但所有像这样的树行走算法都是 O(n)。树的每个节点只被访问一次;如果将 10 个节点添加到树中,则算法会产生另外 10 个堆栈帧,这是一种线性关系。是的,框架对子访问具有前、中和后阶段,因此控制确实会多次返回到框架,但这是正常的线性行为,在访问每个节点时无法提高复杂性树。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多