Java 如何将BST的所有数据存储到数组列表中?

Java 如何将BST的所有数据存储到数组列表中?,java,list,binary-search-tree,Java,List,Binary Search Tree,正如问题所说,我试图制作一个数组列表,其中包含二进制搜索树中每个节点中的所有数据 public List storeKeyValues(){ List keyvalues = new ArrayList(); boolean notdone = false; temp = root; if(temp == null){ return null; } else{ list.add(temp.data);

正如问题所说,我试图制作一个数组列表,其中包含二进制搜索树中每个节点中的所有数据

    public List storeKeyValues(){

    List keyvalues = new ArrayList();
    boolean notdone = false;
    temp = root;

    if(temp == null){
        return null;
    }

    else{
        list.add(temp.data);
        while(!notdone){


            while(temp.left != null){

                list.add(temp.data);

                temp = temp.left;
            }


        }


    }


    return keyvalues;

}
我知道这行不通,但这就是我所做的。有人能给我解释一下如何正确地做吗


提前感谢

您可以通过递归实现这一点

public class TreeNodeDemo {

    List<Integer> values = new ArrayList<Integer>();

    public List<Integer> storeKeyValues(TreeNode root) {
        treeTravel(root);
        return values;
    }

    private void treeTravel(TreeNode node) {
        if (node != null) {
            treeTravel(node.left);
            values.add(node.value);
            treeTravel(node.right);
        }
    }

    public static void main(String args[]) {
        TreeNode root = new TreeNode(4);
        root.left = new TreeNode(2);
        root.right = new TreeNode(5);

        System.out.println(new TreeNodeDemo().storeKeyValues(root));
    }

}
公共类TreeNodeDemo{
列表值=新的ArrayList();
公共列表storeKeyValues(TreeNode根目录){
树丛(根);
返回值;
}
专用void树路径(树节点){
如果(节点!=null){
树路径(节点左);
value.add(node.value);
treeTravel(右节点);
}
}
公共静态void main(字符串参数[]){
TreeNode根=新的TreeNode(4);
root.left=新的树节点(2);
root.right=新的树节点(5);
System.out.println(新的TreeNodeDemo().storeKeyValues(root));
}
}

您可以通过递归
实现这一点

public class TreeNodeDemo {

    List<Integer> values = new ArrayList<Integer>();

    public List<Integer> storeKeyValues(TreeNode root) {
        treeTravel(root);
        return values;
    }

    private void treeTravel(TreeNode node) {
        if (node != null) {
            treeTravel(node.left);
            values.add(node.value);
            treeTravel(node.right);
        }
    }

    public static void main(String args[]) {
        TreeNode root = new TreeNode(4);
        root.left = new TreeNode(2);
        root.right = new TreeNode(5);

        System.out.println(new TreeNodeDemo().storeKeyValues(root));
    }

}
公共类TreeNodeDemo{
列表值=新的ArrayList();
公共列表storeKeyValues(TreeNode根目录){
树丛(根);
返回值;
}
专用void树路径(树节点){
如果(节点!=null){
树路径(节点左);
value.add(node.value);
treeTravel(右节点);
}
}
公共静态void main(字符串参数[]){
TreeNode根=新的TreeNode(4);
root.left=新的树节点(2);
root.right=新的树节点(5);
System.out.println(新的TreeNodeDemo().storeKeyValues(root));
}
}
公共类树阵列列表{
公共静态void main(字符串[]args){
int[]a={15,10,20,8,12,16,25};
节点根=空;
对于(int aa:a){
根=插入(根,aa);
}
列表=新的ArrayList();
System.out.println(treetoArrayList(root,list));
}
私有静态列表树阵列列表(节点根,列表列表){
if(root==null)
退货清单;
树阵列列表(root.left,list);
list.add(root.data);
树阵列列表(root.right,list);
退货清单;
}
专用静态节点插入(节点根,int数据){
if(root==null){
返回新节点(数据);
}
if(数据<根数据){
root.left=插入(root.left,数据);
}
如果(数据>根数据){
root.right=插入(root.right,数据);
}
返回根;
}
//用于存储二进制搜索树节点的数据结构
静态类节点{
int数据;
节点左=空,右=空;
节点(int数据){
这个数据=数据;
}
}
}
公共类树阵列列表{
公共静态void main(字符串[]args){
int[]a={15,10,20,8,12,16,25};
节点根=空;
对于(int aa:a){
根=插入(根,aa);
}
列表=新的ArrayList();
System.out.println(treetoArrayList(root,list));
}
私有静态列表树阵列列表(节点根,列表列表){
if(root==null)
退货清单;
树阵列列表(root.left,list);
list.add(root.data);
树阵列列表(root.right,list);
退货清单;
}
专用静态节点插入(节点根,int数据){
if(root==null){
返回新节点(数据);
}
if(数据<根数据){
root.left=插入(root.left,数据);
}
如果(数据>根数据){
root.right=插入(root.right,数据);
}
返回根;
}
//用于存储二进制搜索树节点的数据结构
静态类节点{
int数据;
节点左=空,右=空;
节点(int数据){
这个数据=数据;
}
}
}