文章

14

粉丝

0

获赞

16

访问

1.7k

头像
二叉树的后序序列 题解:
P4215
发布于2026年2月13日 13:27
阅读数 92

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef struct node{
  5. char data;
  6. struct node *lchild, *rchild;
  7. }*BitTree;
  8.  
  9. string in_str, pre_str;
  10.  
  11.  
  12. // 构建二叉树的递归函数
  13. // pre_l, pre_r: 当前子树在先序序列中的起始和结束下标
  14. // in_l, in_r: 当前子树在中序序列中的起始和结束下标
  15. BitTree build(int pre_l, int pre_r, int in_l, int in_r){
  16. if(pre_l > pre_r) return NULL;
  17. BitTree root = new node();
  18. root->data = pre_str[pre_l];//先序的第一个是根
  19.  
  20. //找到根节点的位置
  21. int k;
  22. for(k = in_l; k <= in_r; k++){
  23. if(in_str[k] == root -> data) break;
  24. }
  25.  
  26. int numLeft = k - in_l;
  27.  
  28. root -> lchild = build(pre_l + 1, pre_l + numLeft, in_l, k - 1);
  29. root -> rchild = build(pre_l + numLeft + 1, pre_r, k + 1, in_r);
  30.  
  31. return root;
  32. }
  33.  
  34. void postOrder(BitTree T){
  35. if(T == NULL) return;
  36. postOrder(T -> lchild);
  37. postOrder(T -> rchild);
  38. cout << T -> data;
  39. }
  40.  
  41. int main(){
  42. cin >> in_str >> pre_str...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发