将一个二叉树镜像
2015-04-03 21:09
183 查看
// test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <string> using namespace std; typedef struct BTreeNode { char Value; BTreeNode* Left; BTreeNode* Right; }BTreeNode; void Visit(BTreeNode* Root) { cout<<Root->Value<<" "; } void BTreeReverse(BTreeNode* &Root) { if(Root==NULL) return; if(Root->Left!=NULL||Root->Right!=NULL) { BTreeNode* Temp; Temp=Root->Left; Root->Left=Root->Right; Root->Right=Temp; } BTreeReverse(Root->Left); BTreeReverse(Root->Right); } void PreOrder(BTreeNode* Root) { if(Root==NULL) return; Visit(Root); PreOrder(Root->Left); PreOrder(Root->Right); } void InOrder(BTreeNode* Root) { if(Root==NULL) return; InOrder(Root->Left); Visit(Root); InOrder(Root->Right); } void PostOrder(BTreeNode* Root) { if(Root==NULL) return; PostOrder(Root->Left); PostOrder(Root->Right); Visit(Root); } void FreeTree(BTreeNode* root) { if(root!=NULL) { FreeTree(root->Left); FreeTree(root->Right); free(root); //当左右子结点都为空时,调用free,释放空间 } } bool IfBtree(string preorder,string inorder) { int position; bool l; bool r; if(preorder.empty()) return true; position=inorder.find(preorder[0]); if(position!=string::npos) { l=IfBtree(preorder.substr(1,position),inorder.substr(0,position)); r=IfBtree(preorder.substr(1+position),inorder.substr(1+position)); } else { return false; } return 1&&r; } BTreeNode* CreatBTreeNode(string preorder,string inorder) { if(preorder.empty()) { return NULL; } if(preorder.length()!=inorder.length()) { cout<<"不能构成二叉树"<<endl; return NULL; } if(IfBtree(preorder,inorder)==false) { cout<<"不能构成二叉树"<<endl; return NULL; } BTreeNode* Root; int position; Root=new BTreeNode; Root->Value=preorder[0]; position=inorder.find(Root->Value); Root->Left=CreatBTreeNode(preorder.substr(1,position),inorder.substr(0,position)); Root->Right=CreatBTreeNode(preorder.substr(1+position),inorder.substr(1+position)); return Root; } int _tmain(int argc, _TCHAR* argv[]) { BTreeNode* Root=NULL; string preorder,inorder; while(cin>>preorder>>inorder) { Root=CreatBTreeNode(preorder,inorder); if(Root!=NULL) { PostOrder(Root); cout<<endl; BTreeReverse(Root); PostOrder(Root); PreOrder(Root); cout<<endl; FreeTree(Root); } } system("pause"); return 0; }
相关文章推荐
- 输入一个二叉树,输出其镜像。
- 简单构建一个二叉树并且产生镜像
- 把一个二叉树转成它的“镜像”
- Java求一个二叉树的镜像(即翻转二叉树)
- day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
- 求一个二叉树的镜像/在二叉树中查找某个元素X
- 输入一个二叉树,输出其镜像(二叉树反转)
- 简单构建一个二叉树而且产生镜像
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 求一个二叉树的镜像 递归和非递归思想
- 补第7天 输入一个二叉树,该函数输出它的镜像。
- 【树】判断二叉树是否镜像 + 将一个二叉树变成其镜像
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 判断二叉树平衡/求二叉树的镜像 附属: 一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中
- [BD-EXAM]20091106在一棵一般的二叉树中找到指定的元素,如果有重复出现的元素,要求元素为深度最深的任何一个
- 发现一个qnx源码在线的镜像
- Altiris安装配置学习教程(十)- 创建一个Push镜像的job
- 用栈实现的一个怪怪的二叉树前序遍历
- 笔试面试之二叉树的镜像
- 本地网络建立一个Debian/Ubuntu镜像