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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Node树的数据转换为有序的ArrayList?相关的知识,希望对你有一定的参考价值。

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

我可以使用什么递归解决方案返回Node内部整数的有序ArrayList?我已经尝试了很多东西但是我一直难以找到递归解决方案。

答案

我不是在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;
}
另一答案

鉴于你有一个bst你可以进行inorder遍历,这将为你提供所有元素的递增顺序(已排序),这是一个如何完成它的例子:

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

以上是关于如何将Node树的数据转换为有序的ArrayList?的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 108. 将有序数组转换为二叉搜索树

100天算法入门 - 每日三题 - Day6对称二叉树二叉树的最大深度将有序数组转换为二叉搜索树

平衡二叉树---将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树

LeetCode-108.将有序数组转换为二叉搜索树

将二叉搜索树转换为有序的双向链表