1. 判断二叉树是否相同,左右孩子互换也认为相同,要求纸上写出全部代码
#include <iostream> using namespace std; typedef struct AA{ AA *l, *r; int data; }Node; Node tree1[10]; Node tree2[10]; /* bool bitree_cmp(Node *n1, Node *n2) { int cnt1 = 0, cnt2=0; bool ans = false; if ( n1 == NULL && n2 == NULL ) return true; if ( (n1 == NULL && n2 != NULL) || (n1 != NULL && n2 == NULL)) return false; if ( n1->data != n2->data ) return false; if ( n1->l ) ++cnt1; if ( n2->r ) ++cnt1; if ( n2->l ) ++cnt2; if ( n2->r ) ++cnt2; if ( cnt1 != cnt2 ) return false; if ( cnt1 == 0 ) return true; ans = bitree_cmp(n1->l, n2->l) && bitree_cmp(n1->r, n1->r); if ( ans ) return true; ans = bitree_cmp(n1->l, n2->r) && bitree_cmp(n1->r, n2->l); return ans; } */ bool bitree_cmp(Node *n1, Node *n2) { if ( n1 == NULL && n2 == NULL ) return true; if ( n1 != NULL && n2 != NULL ) { if ( n1->data == n2->data ) { return ( bitree_cmp(n1->l, n2->l)&&bitree_cmp(n1->r, n2->r) ) || ( bitree_cmp(n1->l, n2->r)&&bitree_cmp(n1->r, n2->l) ); } } return false; } void read_data(Node *tree, int i) { int data, l , r; scanf("%d%d%d",&data, &l, &r); tree[i].data = data; if ( l ) tree[i].l = &tree[l]; else tree[i].l = NULL; if ( r ) tree[i].r = &tree[r]; else tree[i].r = NULL; } int main() { int n1, n2; int l, r, data; int i = 0; scanf("%d", &n1); while(n1--) { read_data(tree1, i); ++i; } scanf("%d", &n2); i = 0; while(n2--) { read_data(tree2, i); ++i; } cout<<bitree_cmp(tree1, tree2)<<endl; cin>>i; return 0; } /* 测试数据: 1 1 2 2 2 2 3 4 6 7 6 7 4 3 从这开始: 7 1 1 2 2 3 4 2 5 6 3 0 0 4 0 0 6 0 0 7 0 0 7 1 1 2 2 3 4 2 5 6 7 0 0 6 0 0 3 0 0 4 0 0 7 1 1 2 2 3 4 2 5 6 3 0 0 4 0 0 6 0 0 7 0 0 7 1 1 2 2 3 4 2 5 6 3 0 0 4 0 0 6 0 0 7 0 0 */