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 []作为输入的函数,并返回一个扁平化的树,将所有节点都放入一个数组中。
答案 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);
}