二叉樹的鏡像,二叉樹鏡像
【題目】
請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。
【分析】
鏡像概念:猶如人照鏡子一般,二叉樹的鏡像,就是將鏡像二叉樹與原二叉樹對摺可以重合的意思,如下:
實現方法:
一層一層向下遍曆每個根節點,將根節點下的左右孩子交換位置。
從根節點開始,交換其左右孩子6和7,以7為根節點的子樹結構和以6為根節點的子樹結構完全交換後,遞迴操作左子樹和右子樹,。
【測試代碼】
#include<stdio.h>#include<stdlib.h>typedef struct BinaryTreeNode{ char data; struct BinaryTreeNode *left; struct BinaryTreeNode *right;}Node;void create(Node **T){ char ch; scanf("\n%c",&ch); if(ch == '#') *T = NULL; else { *T = (Node *)malloc(sizeof(Node)); (*T)->data = ch; create(&(*T)->left); create(&(*T)->right); }}void mirror_tree(Node **root){ if((*root) == NULL) return ; if((*root)->left ==NULL && (*root)->right == NULL) return ; Node *temp = (*root)->left; (*root)->left = (*root)->right; (*root)->right = temp; if((*root)->left) mirror_tree(&(*root)->left); if((*root)->right) mirror_tree(&(*root)->right);}void pre_visit(Node **root){ if((*root) == NULL) { printf("no data, are you kidding me?"); return; } else { printf("%c",(*root)->data); pre_visit(&(*root)->left); pre_visit(&(*root)->right); }}void main(){ Node * root = NULL; printf("二叉樹前序走訪建立:\n"); create(&root); printf("\n"); mirror_tree(&root); printf("二叉樹的鏡像樹前序走訪結果為:\n"); pre_visit(&root); printf("\n");}
【測試結果】
測試例中二叉樹:
測試特殊輸入:空樹