是否可以在不到O(n log n)的时间内比较两个二叉树?

时间:2019-01-07 00:27:46

标签: java algorithm time-complexity binary-tree

我编写了一个Java例程来比较2个二叉树。我正在寻找运行时间更少的更好的算法。

 public class TreeNode {
  int val;
  TreeNode left;
  TreeNode right;
  TreeNode(int x) { val = x; }
 }

 class Solution {
  public boolean isSameTree(TreeNode p, TreeNode q) {

    if  ( p == null && q==null)
        return true;

    if (p == null || q == null) 
        return false;

    if ( (p.val == q.val) && isSameTree(p.left, q.left) && 
      isSameTree(p.right, q.right))
        return true;
    else 
        return false;  
   }   
  }

我的代码需要O(n log n)时间。

如何减少所需时间?

1 个答案:

答案 0 :(得分:17)

您的方法的当前运行时实际上是 O(n) ,其中n应该是树中个结点较少的节点数(如果它们是相等)

此外,请注意比较数据结构的所有值您将不得不访问所有这些值,这是您可以实现的运行时,并且不会进一步减少。在当前情况下,最坏的情况是您必须访问较小树的所有节点,因此必须访问O(n)

尽管有其他方法可以帮助您进行条件优化,但是您当前的解决方案具有最佳的运行时间,无法进一步降低。