//// main.cpp// subStructureInTree//// Created by Hugo Cao on 15/7/10.// Copyright (c) 2015年 Hugo Cao . All rights reserved.///* 问题描述: 二叉树的镜像: 围绕着中心轴做左右调换。就这么短短多几行代码,做递归就可以了。void mirrorRecuresiveriy(binTree bt){ //判断是否为空,或者是子节点为空。 if (bt == NULL || (bt->m_pleft == NULL && bt->m_pright == NULL)) { return ; } //交换左右子树的位置 binTree pTemp = bt->m_pleft; bt->m_pleft = bt->m_pright; bt->m_pright = pTemp; //传入左结点。 if (bt->m_pleft) mirrorRecuresiveriy(bt->m_pleft); //传入右结点。 if (bt->m_pright) mirrorRecuresiveriy(bt->m_pright);} */#includeusing namespace std;#define Data inttypedef struct binaaryTreeNode{ Data m_value; binaaryTreeNode *m_pleft; binaaryTreeNode *m_pright;}btNode, *binTree;binTree addNode(Data value){ binTree bt = NULL; bt = new btNode; if (bt == NULL) { cout << "申请地址错误" << endl; return NULL; } bt->m_value = value; bt->m_pleft = NULL; bt->m_pright = NULL; return bt;}bool connectTreeNode(binTree parrentNode, binTree leftSonNode = NULL, binTree rightSonNode = NULL){ if (parrentNode == NULL || (leftSonNode == NULL && rightSonNode == NULL)) { cout << "结点输入问题" << endl; return false; } parrentNode->m_pleft = leftSonNode; parrentNode->m_pright = rightSonNode; return true;}binTree createBinaryATree(binTree Ahead){ binTree p1 = addNode(8); binTree p2 = addNode(8); binTree p3 = addNode(7); binTree p4 = addNode(9); binTree p5 = addNode(2); binTree p6 = addNode(4); binTree p7 = addNode(7); connectTreeNode(p1, p2, p3); connectTreeNode(p2, p4, p5); connectTreeNode(p5, p6, p7); return (Ahead = p1);}//树的镜像。void mirrorRecuresiveriy(binTree bt){ //判断是否为空,或者是子节点为空。 if (bt == NULL || (bt->m_pleft == NULL && bt->m_pright == NULL)) { return ; } //交换左右子树的位置 binTree pTemp = bt->m_pleft; bt->m_pleft = bt->m_pright; bt->m_pright = pTemp; //传入左结点。 if (bt->m_pleft) mirrorRecuresiveriy(bt->m_pleft); if (bt->m_pright) mirrorRecuresiveriy(bt->m_pright);}void RLR_print_BinaryTree(binTree bt){ if (bt == NULL) return ; cout << bt->m_value << " " << endl; RLR_print_BinaryTree(bt->m_pleft); RLR_print_BinaryTree(bt->m_pright);}int main(){ binTree bt_A = NULL; bt_A = createBinaryATree(bt_A); RLR_print_BinaryTree(bt_A); cout << endl; mirrorRecuresiveriy(bt_A); RLR_print_BinaryTree(bt_A); return 0;}