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数据){
这个数据=数据;
}
}
}