例如, public class BST<Key extends Comparable<Key>,Value> {
private Node root;
public class Node {
private int n;
private Node left;
private Node right;
private Key key;
private Value val;
}
public void put();
public Value get(Key key)
}
类使用树结构:
left
在此结构中,节点与right
和put
字段相关联,并且get
和{{1}}方法支持插入和搜索。
我有兴趣知道
答案 0 :(得分:0)
树结构搜索的关键优势是效率。与迭代数组相比,可以更快地到达与您要搜索的键匹配的节点(例如)。如果你有一个平衡的二叉树(即任何节点左右两侧的树的深度相差不超过1)的1024个项目,那么你需要逐步通过最多10个节点来找到密钥。数组的特殊情况(例如均匀分布的值)可以被有效地搜索,但树对于涉及比插入更多搜索的各种情况非常有用。
另一方面,将值插入树中可能效率低下,特别是由于需要重新平衡树以允许有效搜索(这是它们的主要目的)。这使得put
方法相对复杂(取决于您使用的平衡算法)。
get
方法非常简单:
public Value get(Key key) {
Node node = root;
while (node != null) {
int compare = key.compareTo(node.key);
if (compare > 0)
node = node.right;
else if (compare < 0)
node = node.left;
else
return node.val;
}
return null;
}
答案 1 :(得分:0)
here和here解释得非常清楚。总结一下 - 这就是节点的创建方式。
onInit : function() {
var that = this;
var oView = that.getView();
var mainPageTable = oView.byId("mainPageTable");
var oData = {
root:{
0: {
name: "item1",
enabled: true,
0: {
name: "subitem1-1",
enabled: true,
},
1: {
name: "subitem1-2",
enabled: false,
}
},
}
};
var oModel = new sap.ui.model.json.JSONModel();
oModel.setData(oData);
mainPageTable.setModel(oModel);
mainPageTable.bindRows("/root");
}
});
如果密钥已经存在 - 它被替换,如果密钥是新的,则递归搜索直到搜索在叶子处结束 - 然后用新节点扩展叶子。重要的是要注意节点的最终位置是搜索最终找到它的位置,如果它已经在树中以便满足BST属性。
同样由于二进制搜索树的属性 - 搜索操作是O(log n)或O(h),其中n是节点数,h是树的高度。