(注:题目是借来的,代码是自己写的,已通过VC编译,并正确运行)
A、B两棵树相等当且仅当RootA->c==RootB->c,而且A和B的左右子树对应相等或者左右互换后相等。
#include<stdio.h>
#include<stdlib.h>
typedef struct treeNode
{
struct treeNode *left,*right;
int data;
}treeNode;
treeNode* createTree1(){
treeNode *root,*temp;
root = (treeNode*)malloc(sizeof(treeNode));
root->data = 0;
root->right = NULL;
temp = (treeNode*)malloc(sizeof(treeNode));
temp->data = 1;
temp->left = NULL;
temp->right = NULL;
root->left = temp;
return root;
}
treeNode* createTree2(){
treeNode *root,*temp;
root = (treeNode*)malloc(sizeof(treeNode));
root->data = 0;
root->left = NULL;
temp = (treeNode*)malloc(sizeof(treeNode));
temp->data = 2;
temp->left = NULL;
temp->right = NULL;
root->right = temp;
return root;
}
int compareTree(treeNode *root1,treeNode *root2)
{
if(root1 == NULL && root2 == NULL)
return 1;
if((root1 != NULL && root2 == NULL) || (root1 == NULL && root2 != NULL))
return 0;
if(root1->data == root2->data)
{
if(compareTree(root1->left,root2->left) && compareTree(root1->right,root2->right))
return 1;
if(compareTree(root1->right,root2->left) && compareTree(root1->left,root2->right))
return 1;
}
return 0;
}
void main()
{
treeNode *root1,*root2;
int i;
root1 = createTree1();
root2 = createTree2();
i = compareTree(root1,root2);
printf("%d ",i);
}
二叉树的三种遍历:先序、中序、后序
#include<stdio.h>
#include<stdlib.h>
typedef struct treeNode
{
struct treeNode *left,*right;
int data;
}treeNode;
treeNode* createTree(){
treeNode *node[10];
int i = 0;
for(i = 0 ; i<10;i++)
{
node[i] = (treeNode*)malloc(sizeof(treeNode));
node[i]->data = i;
node[i]->left = NULL;
node[i]->right = NULL;
}
i=0;
while(2*i+1<10)
{
node[i] ->left = node[2*i+1];
if(2*i+2 < 10)
node[i] ->right= node[2*i+2];
i++;
}
return node[0];
}
void inOrderVisit(treeNode *root)
{
if(root){
if(root->left)
inOrderVisit(root->left);
printf("%d ", root->data);
if(root->right)
inOrderVisit(root->right);
}
}
void preOrderVisit(treeNode *root)
{
if(root){
printf("%d ", root->data);
if(root->left)
preOrderVisit(root->left);
if(root->right)
preOrderVisit(root->right);
}
}
void posOrderVisit(treeNode *root)
{
if(root){
if(root->left)
posOrderVisit(root->left);
if(root->right)
posOrderVisit(root->right);
printf("%d ", root->data);
}
}
void main()
{
treeNode *root;
root = createTree();
inOrderVisit(root);
printf("\n");
preOrderVisit(root);
printf("\n");
posOrderVisit(root);
}