16--二叉树的镜像
2015-09-27 19:06
381 查看
// // 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); } */ #include <iostream> using namespace std; #define Data int typedef 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; }
相关文章推荐
- java排列
- java 集合介绍
- ThinkPHP--url地址大小写问题
- 15-- 输入两个二叉树A和B,判断B树是否包含于A树。
- 14--合并两个排序的链表
- 14--反转链表
- A child container failed during start
- HTTPD 工作原理
- 图解Linux命令之--lsattr命令
- 13--输出链表中倒数第k个节点,
- 13--输入一个整数数组,实现一个函数来调整数组中数字的顺序
- poj 2152 树形dp(建立消防站)
- jquery Ajax
- 12--打印1到最大的N为数字。
- 利用VS生成静态库
- 软件生存周期
- 酷狗音乐推出了自媒体APP百花
- C++字符串操作函数
- 用Wget下载整个网站
- 11--数值的整数次方