• 大师傅敢死队风格


    根据先序遍历建树

    1. const int N=2e6+10;
    2. struct node
    3. {
    4. char date;
    5. int l,r;
    6. }str[N];
    7. string s; //读入先序遍历
    8. int cnt,idx;
    9. int build()
    10. {
    11. if (s[cnt]=='#')
    12. {
    13. cnt++;
    14. return 0;
    15. }
    16. str[++idx].date=s[cnt++];
    17. int now=idx;
    18. str[now].l=build();
    19. str[now].r=build();
    20. return now;
    21. }
    22. int u=build();//返回根节点

    根据先序和中序建树

    1. const int N=2e6+10;
    2. struct node
    3. {
    4. int date;
    5. int l,r;
    6. }str[N];
    7. int pre[N],mid[N],n;//读入先序顺序和中序顺序
    8. int cnt,idx;
    9. int build(int len,int pre[],int mid[])
    10. {
    11. if (len<=0) return 0;
    12. str[++idx].date=pre[0];
    13. int i;
    14. for (i=0;i<len;i++)
    15. {
    16. if (mid[i]==pre[0]) break;
    17. }
    18. int now=idx;
    19. str[now].l=build(i,pre+1,mid);
    20. str[now].r=build(len-i-1,pre+i+1,mid+i+1);
    21. return now;
    22. }
    23. int u=build(n,pre,mid);//返回根节点

    根据中序和后序建树

    1. const int N=2e6+10;
    2. struct node
    3. {
    4. int date;
    5. int l,r;
    6. }str[N];
    7. int mid[N],post[N],n;//读入中序顺序和后序顺序
    8. int cnt,idx;
    9. int build(int len,int mid[],int post[])
    10. {
    11. if (len<=0) return 0;
    12. str[++idx].date=post[len-1];
    13. int i;
    14. for (i=0;i<len;i++)
    15. {
    16. if (mid[i]==post[len-1]) break;
    17. }
    18. int now=idx;
    19. str[now].l=build(i,mid,post);
    20. str[now].r=build(len-i-1,mid+i+1,post+i);
    21. return now;
    22. }
    23. int u=build(n,mid,post);//返回根节点

    四种遍历

    1.先序遍历

    1. void Pre(int u)
    2. {
    3. if (!u) return ;
    4. cout<[u].date;
    5. Pre(str[u].l);
    6. Pre(str[u].r);
    7. }

    2.中序遍历

    1. void Mid(int u)
    2. {
    3. if (!u) return ;
    4. Mid(str[u].l);
    5. cout<[u].date;
    6. Mid(str[u].r);
    7. }

    3.后序遍历

    1. void Post(int u)
    2. {
    3. if (!u) return ;
    4. Post(str[u].l);
    5. Post(str[u].r);
    6. cout<[u].date;
    7. }

    4.层序遍历

    1. void bfs(int u)
    2. {
    3. queue <int> q;
    4. q.push(u);
    5. while (q.size())
    6. {
    7. int t=q.front();
    8. q.pop();
    9. cout<<str[t].date;
    10. if (str[t].l) q.push(str[t].l);
    11. if (str[t].r) q.push(str[t].r);
    12. }
    13. }

    树的高度

    1. int deep(int u)
    2. {
    3. if (!u) return 0;
    4. return max(deep(str[u].l),deep(str[u].r))+1;
    5. }
  • 相关阅读:
    【Qt6】QWidgetAction 的使用
    智能计算之蚁群算法(ACO)介绍
    WebRTC源码之音频设备的录制流程源码分析
    企业ERP和泛微OA集成场景分析
    Beyond Compare 4对比工具注册
    js将两张图片合并成一张图片
    wait() ,notify(),notifyAll()以及wait()与sleep()比较
    IPv6协议基本概念
    nginx
    小白开始学习C++
  • 原文地址:https://blog.csdn.net/m0_74403543/article/details/133891106