代码之家  ›  专栏  ›  技术社区  ›  ismael oliva

如何将节点树的数据转换为有序的ArrayList?

  •  4
  • ismael oliva  · 技术社区  · 6 年前
    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
    }
    

    全班在此: https://pastebin.com/nHwXMVrd

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Schidu Luca    6 年前

    考虑到你有 bst 您可以在中进行顺序遍历,这将为您提供所有元素的递增顺序(排序),这是一个如何完成的示例:

     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;
     }
    
        2
  •  0
  •   Robert    6 年前

    我对Java并不精通,但这将是做这件事的总体思路:

    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;
    }