【发布时间】:2023-03-20 05:55:01
【问题描述】:
我编写了一个 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) 时间。
如何减少所需时间?
【问题讨论】:
-
如果你碰巧在结构的底部有一个
size变量,请先进行比较。 -
不要写,永远不要出现未注释的代码。永远不要编码
if (condition) return true; else return false;。只需// same tree if same root, left, and right return p == q || null != p && null != q && p.val == q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right); -
你算什么
n?您的算法在节点数上看起来非常线性。
标签: java algorithm time-complexity binary-tree