由前序遍历和中序遍历重建二叉树和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
原创粉丝点击