欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

class28 树的遍历与推导 lcy

时间:2024-09-26 20:22 作者:admin 点击:
1364 中 分左右两边 先、后、层 找根 #include bits/stdc++.h using namespace std; // zx + cx - xx void zhao(string zx,string cx){ if(zx.size()==0) return ; char r=cx[0]; int dr=zx.find(r); string zxl=zx.substr(0,dr); string zxr=zx

1364

中 分左右两边

先、后、层 找根

#include <bits/stdc++.h>

using namespace std;

// zx + cx -> xx

void zhao(string zx,string cx){

   if(zx.size()==0) return ;

   char r=cx[0];

   int dr=zx.find(r);

   string zxl=zx.substr(0,dr);

   string zxr=zx.substr(dr+1);

   string cxl="",cxr="";

   for(int i=1;i<cx.size();i++){

       int dk=zxl.find(cx[i]);

       if(dk!=-1) cxl+=cx[i];

       else cxr+=cx[i];

   }

   cout<<r;//根

   zhao(zxl,cxl);//左

   zhao(zxr,cxr);//右

}

// zx + xx -> hx

void zhao(string zx,string xx){

   if(zx.size()==0) return ;

   char r=xx[0];

   int dr=zx.find(r);

   string zxl=zx.substr(0,dr);

   string zxr=zx.substr(dr+1);

   string xxl=xx.substr(1,dr);

   string xxr=xx.substr(dr+1);

   zhao(zxl,xxl);//左

   zhao(zxr,xxr);//右

   cout<<r;//根

}

// zx + hx -> xx

void zhao(string zx,string hx){

   if(zx.size()==0) return ;

   char r=hx[hx.size()-1];//hx.back();

   int dr=zx.find(r);

   string zxl=zx.substr(0,dr);

   string zxr=zx.substr(dr+1);

   string hxl=hx.substr(0,dr);

   string hxr=hx.substr(dr,zxr.size());

   cout<<r;//根

   zhao(zxl,hxl);//左

   zhao(zxr,hxr);//右

}

int main(){

   string a,b;

   cin>>a>>b;

   zhao(a,b);

   return 0;

}


//先序遍历,中序遍历,后序遍历,层序遍历

数组存二叉树

结点x,父节点是x/2,左子结点2*x,右子结点2*x+1

int tree[10000];

假设根结点是1

void xxbl(int r){

   if(tree[r]==0) return ;

   cout<<tree[r];

   xxbl(r*2);

   xxbl(r*2+1);

}

指针存二叉树

struct node{

   char k;

   node *l=nullptr,*r=nullptr;

};

//先序遍历

void xxbl(node *p){

   if(p==nullptr) return ;

   cout<<p->k;

   xxbl(p->l);

   xxbl(p->r);

}

//中序遍历

void zxbl(node *p){

   if(p==nullptr) return ;

   zxbl(p->l);

   cout<<p->k;

   zxbl(p->r);

}

//后序遍历

void hxbl(node *p){

   if(p==nullptr) return ;

   hxbl(p->l);

   hxbl(p->r);

   cout<<p->k;

}


----

层序遍历的数组版本和指针版本下节课。

回顾问题主要集中在基础一的第五章和第六章。

(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%