【发布时间】:2015-04-06 06:24:39
【问题描述】:
这属于https://stackoverflow.com/help/on-topic的“软件算法”
特别是“通过数组或链表实现二叉树的性能”
如何通过数组或链表实现二叉树?
我被教导这样做的方法是拥有一个链接节点类型的结构,它有两个指针,左和右,即(来自https://courses.cs.washington.edu/courses/cse143/12wi/lectures/02-22/programs/IntTreeNode.java)
public class IntTreeNode {
public int data;
public IntTreeNode left;
public IntTreeNode right;
public IntTreeNode(int data) {
this(data, null, null);
}
public IntTreeNode(int data, IntTreeNode left, IntTreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
}
然后在实际的二叉树中
public class IntTree {
IntTreeNode overallRoot;
public IntTree() {
overallRoot = null;
}
....
}
如果您只使用数组或链表(一个指针),您将如何处理?
但无论如何,这应该是一个快速的问题。即使您没有实现不应该执行的树,您将如何分析树的性能?性能是否取决于树的状态,就像它是 BST 一样?就像 BST 一样, find 将是 O(log n) 因为你每次都要砍掉一半的树。
您将如何根据这两种实现立即分析性能?
【问题讨论】:
标签: java algorithm tree linked-list binary-tree