合并两棵二叉树

时间:2012-02-15 00:28:24

标签: binary-search-tree

public int merge(BNode node, int array[], int i) {
    if (node == null)
        return i;
    //Flatten left subtree
    i = merge(node.left, array, i);
    //Get data from the current node
    array[i] = node.value;
    //Flatten right subtree
    i = merge(node.right, array, i + 1);
    return i;
}

我正在尝试合并两个二叉树并保留BST属性。 我使用的方法是展平树并将它们存储在数组中。 上面的函数展平了我的第一棵树并将其存储在数组[]中。

我想要一个将rootnode和blank array []作为输入的函数,并返回一个扁平化的树,将所有节点都放入一个数组中。

1 个答案:

答案 0 :(得分:0)

正如您所做,如果要合并2个二叉搜索树,最好的方法是:    1)将树拼平成分类列表。    2)合并列表。    3)将合并列表转换为BST。

您可以通过这种方式轻松实现您正在寻找的功能:

BinarySearchTree* arrayToTree(int arr[], int start, int end) {
  if (start > end) return NULL;
  int mid = start + (end - start) / 2;
  BinarySearchTree *node = new BinarySearchTree(arr[mid]);
  node->left = arrayToTree(arr, start, mid-1);
  node->right = arrayToTree(arr, mid+1, end);
  return node;
}

BinarySearchTree* arrayToTree(int arr[], int n) {
  return arrayToTree(arr, 0, n-1);
}