Java 如何使树节点基于其值递归地成为根节点?
给定2个数组C[],D[]C是城市D是城市值,如下所示:Java 如何使树节点基于其值递归地成为根节点?,java,arrays,algorithm,sorting,data-structures,Java,Arrays,Algorithm,Sorting,Data Structures,给定2个数组C[],D[]C是城市D是城市值,如下所示: C[0] = 1 D[0] = 6 C[1] = 3 D[1] = 2 C[2] = 0 D[2] = 7 C[3] = 3 D[3] = 5 C[4] = 2 D[4] = 6 C[5] = 4 D[5] = 5 C[6] = 4 D[6] = 2 城市c[0]=1,城市0与城市1链接,城市0的值=6, 城市c[1]=3,城市1与城市3相连,城市1的值=2, 以此类推,我用二叉树来表示它们
C[0] = 1 D[0] = 6
C[1] = 3 D[1] = 2
C[2] = 0 D[2] = 7
C[3] = 3 D[3] = 5
C[4] = 2 D[4] = 6
C[5] = 4 D[5] = 5
C[6] = 4 D[6] = 2
城市c[0]=1,城市0与城市1链接,城市0的值=6,
城市c[1]=3,城市1与城市3相连,城市1的值=2,
以此类推,我用二叉树来表示它们,但如何才能使城市的最大价值是根,在旋转树时保持关系
目标是计算具有最大值且仅与此连接的城市数
守则:
class BinaryTree {
Node root;
public void addNode(int toCity, int name, int atractiveness) {
Node newNode = new Node(toCity, name, atractiveness);
if (root == null) {
root = newNode;
} else {
Node focusNode = root;
Node parent;
while (true) {
parent = focusNode;
if (toCity < focusNode.toCity) {
focusNode = focusNode.leftChild;
if (focusNode == null) {
parent.leftChild = newNode;
return;
}
} else {
focusNode = focusNode.rightChild;
if (focusNode == null) {
parent.rightChild = newNode;
return; // All Done
}
}
}
}
}
public void preorderTraverseTree(Node focusNode) {
int totalNumOfCities=0;
int totalAtractivness=0;
if (focusNode != null) {
System.out.println(focusNode);
preorderTraverseTree(focusNode.leftChild);
preorderTraverseTree(focusNode.rightChild);
}
}
public Node findNode(int name) {
Node focusNode = root;
while (focusNode.name != name) {
if (name < focusNode.name) {
focusNode = focusNode.leftChild;
} else {
focusNode = focusNode.rightChild;
}
if (focusNode == null)
return null;
}
return focusNode;
}
}
public int solution(int K, int[] C, int[] D){
BinaryTree theTree = new BinaryTree();
for (int i = 0; i < C.length; i++) {
theTree.addNode(C[i], i,D[i]);
}
theTree.preorderTraverseTree(theTree.root);
return 0;
}
}
您可能想考虑使用B-树设计,而不是像我假设您尝试使用BST的形式一样。我认为@DavidColer表示B+树。另外,您事先知道所有节点吗?如果是这样,您所要做的就是对D列表进行排序,并找到用作根的最大值。我想根据其值返回最大城市数,但必须相互连接,因此我想在运行时获得子树的最大D值,我应该使用哪种算法BST或B树?看起来您的链接形成了一个二分图。