Java 如何使树节点基于其值递归地成为根节点?

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, 以此类推,我用二叉树来表示它们

给定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, 以此类推,我用二叉树来表示它们,但如何才能使城市的最大价值是根,在旋转树时保持关系

目标是计算具有最大值且仅与此连接的城市数 守则:

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树?看起来您的链接形成了一个二分图。