我有这个算法,A和B是两个不同二叉树根的地址。
每个节点都有一个值,指向左子树的指针和指向右子树的指针。
以下是算法:
foo(A,B){
if (A == NULL){
return B;
}
if (B != NULL){
if(A->value > B->value){
return foo(B,A);
}
B->left = foo(A->right,B->left);
A->right = B;
}
return A;
}
我确实理解它将树B合并到树A的右子树, 但是我没有经理去了解价值观的规律性。
希望你能帮我解决这个问题,谢谢!
答案 0 :(得分:9)
我认为目的是获取两个已排序的二叉树并将它们组合成一个排序的二叉树。
关键是比较if(A->value > B->value)
。此分支确保A
参数将始终包含合并子树的点的较小值,这会强制对结果进行排序。
由于此算法永远不会遍历A->left
和B->right
,因此对所提供的两个树似乎有一些额外的要求。一种可能性是预期它们不具有重叠范围。也就是说,一棵树的最小值必须大于另一棵树的最大值。或者要求可能是涉及子树内容的类似的其他事情。或者,值的类型可能仅限于两个值,如布尔值。