【发布时间】:2012-08-13 14:22:13
【问题描述】:
下面的设计可以进一步优化吗?我使用了哈希图和队列。所以空间复杂度为 O(n),运行时间为 O(n)
public class PrintAllRootToLeaves {
public static void print(BinaryTreeNode root) {
Queue nodesQ = new Queue();
HashMap hMap = new HashMap();
BinaryTreeNode head = root;
String tempVal ;
hMap.put(head,String.valueOf(head.getData()));
while (head != null) {
BinaryTreeNode left = head.getLeft();
BinaryTreeNode right = head.getRight();
if (left != null) {
if ((tempVal = (String) hMap.get(head)) != null) {
hMap.put(left,tempVal + left.getData());
}
nodesQ.enqueue(left);
}
if (right != null) {
if ((tempVal = (String) hMap.get(head)) != null) {
hMap.put(right,tempVal + right.getData());
}
nodesQ.enqueue(right);
}
if (right != null && left != null) {
hMap.remove(head);
}
head = (BinaryTreeNode) nodesQ.dequeue();
}
System.out.println("-----------Printing all routes ---------->" + hMap.values());
}
}
【问题讨论】:
-
看来您需要遍历每个节点,所以我看不出复杂性如何小于 O(n)。您可以做的是使用 StringBuilder 而不是附加到字符串。
-
为什么要在循环中从 hashmap 中删除节点,您是否只想打印最低的树节点?
-
这不能在
O(N*Log N)下完成,因为你有N*Log N要打印的项目。 -
@kditraglia,我正在从 hashmap 中删除节点以获取从根到叶的路径而不是中间路径?
-
@Peter,空间复杂度如何,有什么建议吗?
标签: java algorithm optimization tree binary-tree