任何人都可以解釋爲什麼我在這裏得到兩次輸出?爲什麼在這個樹程序中我得到了兩次輸出?
# include<iostream>
# include<conio.h>
# include <stdio.h>
using namespace std;
struct tree
{
int data;
struct tree * left;
struct tree * right;
};
struct tree * insert(struct tree * root,int value)
{
if (root==NULL)
{
struct tree * node= (struct tree *)malloc(sizeof(struct tree));
node->data=value;
node->right=NULL;
node->left=NULL;
return node;
}
else if(root->data > value)
root->left=insert(root->left,value);
else
root->right=insert(root->right,value);
}
int same_tree(struct tree * root1, struct tree* root2)
{
if((root1==NULL && root2!=NULL) || (root1!=NULL && root2==NULL))
{
cout << " tree are not equal \n";
return -1;
}
if(root1 && root2)
{
same_tree(root1->left,root2->left);
if(root1->data!=root2->data)
{
cout << "tree not equal \n";
return -1;
}
same_tree(root1->right,root2->right);
}
}
int main()
{
struct tree * root=NULL;
root= insert(root,8);
insert(root,6);
insert(root,7);
insert(root,5);
insert(root,1);
insert(root,20);
insert(root,15);
struct tree * root2=NULL;
root2= insert(root2,8);
insert(root2,6);
insert(root2,7);
insert(root2,5);
insert(root2,1);
insert(root2,20);
insert(root2,18);
int j= same_tree(root,root2);
if(j==-1)
cout << " tree not eqqual \n";
else
cout << "tree are equal\n";
getch();
return 0;
}
編寫該程序是爲了比較兩棵樹是否相同(在它們包含的同一層次結構和數據中)。我在這裏比較的兩棵樹是從main(root和root2)傳入的。 如果有相同的樹,我得到一次「樹相等」的O/O。但如果樹不相等,我得到一個o/p「tre不相等」,並在下一行中作爲「樹相等」。我無法解釋爲什麼?我編寫了整個程序,以便任何人都可以複製粘貼並在系統上運行它。我想問題在於same_tree的遞歸調用的地方,但位置和原因是什麼我沒有得到
這是爲什麼標籤的Java? – 2012-02-12 18:42:49
這是什麼*語言* FrankenC++? – 2012-02-12 18:44:38
@Luchian對不起mea culpa ... untagged它 – Invictus 2012-02-12 18:45:10