代码实现 由二叉树的先序遍历和中序遍历推出后序遍历

      1 #include <stdio.h>
      2
      3 using namespace std;
      4
      5 #define MAX 100
      6
      7 char preOrder[MAX] = {'A','B', 'D', 'E', 'G', 'C', 'F'};
      8 char inOrder[MAX] = {'D', 'B', 'E', 'G', 'A', 'F', 'C'};
      9
     10 void getPostOrder(int preLeft, int preRight, int inLeft, int inRight) {
     11
     12     if(preLeft > preRight || inLeft > inRight) {
     13         return ;
     14     }
     15
     16     char root = preOrder[preLeft];
     17     int i = inLeft;
     18     for( ; i <= inRight; i++) {
     19         if(inOrder[i] == root)
     20             break;
     21     }
     22
     23     int leftLen = i - inLeft;
     24     int rightLen = inRight - i;
     25     //递归遍历左子树
     26     if(leftLen > 0)
     27         getPostOrder(preLeft+1, preLeft + leftLen, inLeft, i-1);
     28     //递归遍历右子树
     29     if(rightLen > 0)
     30         getPostOrder(preLeft + leftLen + 1, preRight, i+1, inRight);
     31     //最后输出根节点 (PostOrder是左、右、根的顺序)
     32     printf("%c\t", preOrder[preLeft]);
     33     return ;
     34 }
     35
     36 int main() {
     37     getPostOrder(0, 6, 0, 6);
     38 }


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值