原始代码
void isequal(bitree *p,bitree *q,int n)
{
if(p!=NULL&&q!=NULL)
{
int count=0;
if(p.data==q.data)
count++;
isequal(p->lchild,q->lchcild,n)
isequal(p->rchild,q->rchild,n)
}
if(count==n)
cout<<"q树和p树相等"<<endl;
else
cout<<false;
}
修改代码
void isequal(bitree p, bitree q, int& count, int n) {
if (p != NULL && q != NULL) {
if (p->data == q->data)
count++;
isequal(p->lchild, q->lchild, count, n);
isequal(p->rchild, q->rchild, count, n);
}
}
完整代码
#include <iostream>
using namespace std;
struct TreeNode {
int data;
struct TreeNode* lchild;
struct TreeNode* rchild;
};
typedef struct TreeNode* bitree;
bitree createNode(int data) {
bitree newNode = new TreeNode;
newNode->data = data;
newNode->lchild = NULL;
newNode->rchild = NULL;
return newNode;
}
bitree createBinaryTree1() {
bitree root = createNode(1);
root->lchild = createNode(2);
root->rchild = createNode(3);
root->lchild->lchild = createNode(4);
root->lchild->rchild = createNode(5);
root->rchild->lchild = createNode(6);
root->rchild->rchild = createNode(7);
return root;
}
bitree createBinaryTree2() {
bitree root = createNode(1);
root->lchild = createNode(2);
root->rchild = createNode(3);
root->lchild->lchild = createNode(4);
root->lchild->rchild = createNode(5);
root->rchild->lchild = createNode(6);
root->rchild->rchild = createNode(7); // 修改此处的节点值为 8
return root;
}
void isequal(bitree p, bitree q, int& count, int n) {
if (p != NULL && q != NULL) {
if (p->data == q->data)
count++;
isequal(p->lchild, q->lchild, count, n);
isequal(p->rchild, q->rchild, count, n);
}
}
bool isTreeEqual(bitree p, bitree q, int n) {
int count = 0;
isequal(p, q, count, n);
return count == n;
}
int main() {
bitree p = createBinaryTree1();
bitree q = createBinaryTree2();
int n = 7;
if (isTreeEqual(p, q, n)) {
cout << "q树和p树相等" << endl;
} else {
cout << "q树和p树不相等" << endl;
}
return 0;
}