AVL树可以使用递归来比较两个树的节点值是否相同。实现的基本思路是先比较根节点的值是否相等,再分别递归比较左子树和右子树。
以下是一个示例实现:
bool operator==(const AVLTreeNode& lhs, const AVLTreeNode& rhs) {
if (lhs.value != rhs.value || lhs.height != rhs.height) {
return false;
}
bool is_left_same = false;
if (lhs.left == nullptr && rhs.left == nullptr) {
is_left_same = true;
} else if (lhs.left != nullptr && rhs.left != nullptr) {
is_left_same = (*lhs.left == *rhs.left);
}
bool is_right_same = false;
if (lhs.right == nullptr && rhs.right == nullptr) {
is_right_same = true;
} else if (lhs.right != nullptr && rhs.right != nullptr) {
is_right_same = (*lhs.right == *rhs.right);
}
return is_left_same && is_right_same;
}
该代码片段实现了比较单个节点。当比较左子树和右子树时,首先检查左右子节点是否都为 nullptr
。如果两个子节点都为 nullptr
,则两个子树相同,返回 true
。如果两个子节点中有一个为 nullptr
,那么它们不相等,返回 false
。否则,递归比较左右子树的子节点,直到所有节点都被比较。
这个实现可以被用于自定义比较函数,在需要比较两个AVL树时可以直接调用 operator==
函数来实现比较。
下一篇:AVL树单旋转函数