E:\arithmetic\SubTree
#include <stdio.h>
#define END (-2000)
typedef struct BinaryTreeNode{
int value;
struct BinaryTreeNode *lChild;
struct BinaryTreeNode *rChild;
}TreeNode;
TreeNode* insertNodePre(int arr[], int *i);
void preOrder(TreeNode *r);
void mirrorTree(TreeNode *root);
int main(int argc, char *argv[])
{
int arr[] = {1, 2, 3, END, END, 4, 5, END, END, 6, END, END, 7, END, END};
int i = 0;
TreeNode *root = insertNodePre(arr, &i);
preOrder(root);
printf("\n");
mirrorTree(root);
preOrder(root);
return 0;
}
void mirrorTree(TreeNode *root){
if(root == NULL)
return;
TreeNode *temp = NULL;
temp = root->lChild;
root->lChild = root->rChild;
root->rChild = temp;
mirrorTree(root->lChild);
mirrorTree(root->rChild);
}
//Ç°Ðò±éÀú¹¹½¨¶þ²æÊ÷£¬ÊäÈëÊý×éÇ°£¬ ÒªÏȽ«ËùÓеÄÒ¶×Ó½Úµã½øÐÐÀ©Õ¹£¬±£Ö¤ËùÓеÄÒ¶×ӽڵ㶼ΪNULL
TreeNode* insertNodePre(int arr[], int *i){
int k = *i;//£¡£¡£¡Ö±½ÓÓÃarr[*i]²»¶Ô
if(arr[k] == END){
k++;
*i = k;
return NULL;
}
int j;
TreeNode *t = malloc(sizeof(TreeNode));
t->value = arr[k];
k++;
*i = k;
t->lChild = insertNodePre(arr, i);
t->rChild = insertNodePre(arr, i);
return t;
}
void preOrder(TreeNode *r){
if(r == NULL){
return;
}
printf("%d\t", r->value);
preOrder(r->lChild);
preOrder(r->rChild);
}