Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将节点树的数据转换为有序ArrayList? 公共类节点{ 私有int数据; 公共int getData(){ 返回数据; } 私有节点左; 私有节点权; 公共节点(int d、节点l、节点r){ 数据=d; 左=l; 右=r; } //深度复制构造函数 公共节点(节点o){ 如果(o==null)返回; this.data=o.data; 如果(o.left!=null)this.left=新节点(o.left); 如果(o.right!=null)this.right=新节点(o.right); } 公众名单收费表(){ //这里的递归代码返回节点的有序列表 }_Java_Recursion_Tree_Binary - Fatal编程技术网

Java 如何将节点树的数据转换为有序ArrayList? 公共类节点{ 私有int数据; 公共int getData(){ 返回数据; } 私有节点左; 私有节点权; 公共节点(int d、节点l、节点r){ 数据=d; 左=l; 右=r; } //深度复制构造函数 公共节点(节点o){ 如果(o==null)返回; this.data=o.data; 如果(o.left!=null)this.left=新节点(o.left); 如果(o.right!=null)this.right=新节点(o.right); } 公众名单收费表(){ //这里的递归代码返回节点的有序列表 }

Java 如何将节点树的数据转换为有序ArrayList? 公共类节点{ 私有int数据; 公共int getData(){ 返回数据; } 私有节点左; 私有节点权; 公共节点(int d、节点l、节点r){ 数据=d; 左=l; 右=r; } //深度复制构造函数 公共节点(节点o){ 如果(o==null)返回; this.data=o.data; 如果(o.left!=null)this.left=新节点(o.left); 如果(o.right!=null)this.right=新节点(o.right); } 公众名单收费表(){ //这里的递归代码返回节点的有序列表 },java,recursion,tree,binary,Java,Recursion,Tree,Binary,全班同学在这里: 我可以使用什么递归解决方案来返回节点内整数的有序数组列表?我已经尝试了很多方法,但一直很难找到递归解决方案。我对Java不精通,但这将是执行此操作的总体思路: public class Node { private int data; public int getData() { return data; } private Node left; private Node right; public Node(int d, Node l, Node r) {

全班同学在这里:


我可以使用什么递归解决方案来返回节点内整数的有序数组列表?我已经尝试了很多方法,但一直很难找到递归解决方案。

我对Java不精通,但这将是执行此操作的总体思路:

public class Node {
private int data;

public int getData() {
    return data;
}

private Node left;
private Node right;

public Node(int d, Node l, Node r) {
    data = d;
    left = l;
    right = r;
}

// Deep copy constructor
public Node(Node o) {
    if (o == null) return;
    this.data = o.data;
    if (o.left != null) this.left = new Node(o.left);
    if (o.right != null) this.right = new Node(o.right);
}

public List<Integer> toList() {
// Recursive code here that returns an ordered list of the nodes
}
public List toList()
{
List newList=新列表();
newList.add(this.data);
if(左!=null)
newList.addAll(left.toList());
if(右!=null)
newList.addAll(right.toList());
返回newList;
}

如果您有一个
bst
,您可以在中进行顺序遍历,这将为您提供所有元素的递增顺序(排序),例如:

public List<Integer> toList() 
{
   List<Integer> newList = new List<Integer>();
   newList.add(this.data);
   if(left != null)
      newList.addAll(left.toList());
   if(right != null)
      newList.addAll(right.toList());
   return newList;
}
public List toList(){
返回createOrderedList(此);
}
私有列表createOrderedList(节点根){
if(root==null){
返回新的ArrayList();
}
列表=新的ArrayList();
addAll(createOrderedList(root.left));
list.add(root.data);
addAll(createOrderedList(root.right));
退货清单;
}

这是一个二元搜索树吗?是的,这是一个二元搜索树,我会添加集合。排序(newList);只是对列表进行排序。期待更有效的解决方案!我的教授说有一种方法可以自动对列表进行排序,而不需要集合!谢谢。要获得一个有序列表,只需将这一行放入
newList.add即可(this.data);
在第一个
if
之后。这将是一个顺序遍历:)
返回新的ArrayList
集合。emptyList()
,您还应该确定您的答案,这是使用递归,它适用于许多节点……这一点很好。但关于递归,我认为这没什么大不了的。堆栈中保留的最大调用数等于树的高度,在大多数情况下,树的高度在某种程度上是
nlogn
,(除非它非常不平衡)因此,如果这是你的观点的话,你需要一棵真正的大树才能得到一个
堆栈溢出
 public List<Integer> toList() {
        return createOrderedList(this);
 }

 private List<Integer> createOrderedList(Node root) {
     if(root == null) {
         return new ArrayList<>();
     }

     List<Integer> list = new ArrayList<>();
     list.addAll(createOrderedList(root.left));
     list.add(root.data);
     list.addAll(createOrderedList(root.right));

     return list;
 }