由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
来源:互联网 发布:c 面向对象编程 编辑:程序博客网 时间:2024/06/08 07:17
由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
今天分享一下实现由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态的源代码和运行示例。
由前序遍历和中序遍历重建二叉树的源代码和运行示例。(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)
源代码如下:
#include<iostream>using namespace std;struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){ }};bool _Rebuild(vector<int> Pre, vector<int> Ord, int& index, int size, int begin, int end,TreeNode*& root){//[]if(index>=size || begin>end){root=NULL;index -=1;return true;}int mid=begin;int cur=Pre[index];while(mid<=end){//[]if(cur == Ord[mid]){root=new TreeNode(cur);index +=1;if(_Rebuild(Pre, Ord, index, size, begin, mid-1, root->left)){index +=1;return _Rebuild(Pre, Ord, index, size, mid+1, end, root->right);}elsereturn false;}else{++mid;}}return false;}//由前序遍历和中序遍历重建二叉树TreeNode* Rebuild(vector<int> Pre, vector<int> Ord){//由前序遍历和中序遍历重建二叉树int psize=Pre.size();int osize=Ord.size();if(psize != osize) return NULL;TreeNode* root=NULL;int pindex=0;int oindex=0;if(_Rebuild(Pre, Ord, pindex, psize, 0, osize-1, root)){return *(&root);}return NULL;}void PrePrint(TreeNode* root)//前序遍历{if(root==NULL) return;cout<<root->val<<" ";PrePrint(root->left);PrePrint(root->right);}void OrdPrint(TreeNode* root)//中序遍历{if(root==NULL) return;OrdPrint(root->left);cout<<root->val<<" ";OrdPrint(root->right);}void TestRebuild(){//由前序遍历和中序遍历重建二叉树int a[]={1,2,4,3,7,8};int asize=sizeof(a)/sizeof(a[0]);int b[]={4,2,1,7,3,8};int bsize=sizeof(b)/sizeof(b[0]);cout<<"由前序遍历和中序遍历重建二叉树"<<endl<<endl;vector<int> Pre;cout<<"前序遍历序列: ";for(int i=0; i<asize; i++){Pre.push_back(a[i]);cout<<a[i]<<" ";}cout<<endl;vector<int> Ord;cout<<"中序遍历序列: ";for(int i=0; i<bsize; i++){Ord.push_back(b[i]);cout<<b[i]<<" ";}cout<<endl<<endl;TreeNode* root=Rebuild(Pre, Ord);//由前序遍历和中序遍历重建二叉树cout<<"二叉树前序遍历: ";PrePrint(root);//前序遍历cout<<endl;cout<<"二叉树中序遍历: ";OrdPrint(root);//中序遍历cout<<endl<<endl;}int main(){TestRebuild();//由前序遍历和中序遍历重建二叉树system("pause");return 0;}
运行结果:
C语言模式实现C++继承和多态的源代码和运行示例。
提示:C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数。
源代码如下:
#include<iostream>using namespace std;//c++实现多态和继承class Rparent{protected:int _a;public:virtual void Case(){cout<<"Rparent->_a"<<endl;}};class Rchild:public Rparent{protected:int _b;public:void Case(){cout<<"Rchild->_b"<<endl;}};void CaseCpp(Rparent* _point){_point->Case();}void TectCpp(){//c++实现多态和继承cout<<"c++实现多态和继承"<<endl;Rparent p1;Rchild p2;CaseCpp(&p1);CaseCpp(&p2);cout<<endl;}//C语言模式实现C++继承和多态//继承,做子类的结构体中包含做基类的结构体的变量示例即可//函数指针做多态typedef void (*CASE)();//函数指针struct Parent{int _a;CASE _s;};struct Child{Parent _parent;//一定要放在其他成员函数上面,不然下面的强转可能会遭遇尴尬,可以试试会出现什么~天使笑int _b;};void CaseP(){cout<<"Parent->_a"<<endl;}void CaseC(){cout<<"Child->_b"<<endl;}void Case(Parent* _point){_point->_s();}void TestC292(){//C语言模式实现C++继承和多态cout<<"C语言模式实现C++继承和多态"<<endl;Parent p1;Child p2;p1._s = CaseP;p2._parent._s = CaseC;Case(&p1);Case((Parent*) &p2);//不行}struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){ }};int main(){TectCpp();//c++实现多态和继承TestC292();//C语言模式实现C++继承和多态system("pause");return 0;}
运行结果:
分享如上,如有错误,望斧正!愿大家学得开心,共同进步!
ps:博主昨天被小怪兽带走了,没更新,嘤嘤嘤嘤!
阅读全文
0 0
- 由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- 【面试算法系列】已知二叉树的前序和中序遍历重建二叉树 - C语言实现
- (C语言)二叉树非递归遍历前序和中序(数据结构十四)
- 【二叉树】由前序遍历和中序遍历重建二叉树
- 二叉树--由前序遍历和中序遍历重建二叉树
- 由前序遍历序列和中序遍历序列重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- ~由前序遍历和中序遍历重建二叉树~
- 剑指offer 6---由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 剑指:由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 每日一题之由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树
- DOM(二)
- mongodb replica sets(复制集)配置与搭建
- uva 11464 暴力枚举矩阵
- 整理音乐(多个链表的重复归并问题)
- Android中Log的重要性
- 由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
- html之图像
- 题目1054:字符串内排序
- 一个简易的基于局域网的聊天室程序
- centos下安装mysql(笔记系列)
- 循环链表前后移动位置函数
- 货拉拉系统app开发
- DOM(三)——操作技术
- Kafka消费者生产者实例