在C++中,判斷兩棵二叉樹是否相同或相似可以通過遞歸的方式進行比較。首先,我們需要定義一個二叉樹節(jié)點的結(jié)構(gòu)體,然后編寫一個函數(shù)來比較兩個節(jié)點是否相等。如果兩個節(jié)點的值相等,并且它們的左右子樹也分別相等,那么這兩棵樹就是相同的。
以下是一個簡單的示例代碼:
#include <iostream>
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isSameTree(TreeNode* p, TreeNode* q) {
if (p == NULL && q == NULL) return true; // 如果兩個節(jié)點都為空,返回true
if (p == NULL || q == NULL) return false; // 如果其中一個節(jié)點為空,返回false
if (p->val != q->val) return false; // 如果兩個節(jié)點的值不相等,返回false
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right); // 遞歸比較左右子樹
}
int main() {
TreeNode* tree1 = new TreeNode(1);
tree1->left = new TreeNode(2);
tree1->right = new TreeNode(3);
TreeNode* tree2 = new TreeNode(1);
tree2->left = new TreeNode(2);
tree2->right = new TreeNode(3);
if (isSameTree(tree1, tree2)) {
std::cout << "兩棵樹相同" << std::endl;
} else {
std::cout << "兩棵樹不相同" << std::endl;
}
return 0;
}
在這個示例中,我們定義了一個名為isSameTree
的函數(shù),它接受兩個TreeNode
指針作為參數(shù)。這個函數(shù)首先檢查兩個節(jié)點是否都為空,如果是,則返回true
。如果其中一個節(jié)點為空,另一個不為空,則返回false
。接下來,它比較兩個節(jié)點的值,如果不相等,則返回false
。最后,它遞歸地比較兩個節(jié)點的左右子樹。如果所有條件都滿足,那么這兩棵樹就是相同的。