求先序排列

题目描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8。

输入格式:

2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

输出格式:

1行,表示一棵二叉树的先序。

输入样例1:

BADC
BDCA

输出样例1:

ABCD

解题思路

就是一个先中后序遍历的问题,看代码吧,有标注示。

代码

#include <iostream>
#include <cstring>
using namespace std;
string a;
string b;
void xian(int zl,int zr,int hl,int hr){
    if(zl>zr){//如果最左大于最右,也就是没有子节点以及这个节点了,就直接返回
        return ;
    }
    cout<<b[hr];//如果最左小于等于最右,也就是还有自己的节点或之后的节点,就输出这个节点
    if(zl==zr){//等于也要返回
        return ;
    }
    int mid;//mid为根节点,在中序遍历中也是中点
    for(mid=zl;mid<=zr;mid++){
        if(a[mid]==b[hr]){//如果是跟节点,就赋值为跟节点
            break;
        }
    }
    int cntl=mid-zl;//左边有多少个节点
    int cntr=zr-mid;//右边有多少个节点
    xian(zl,mid-1,hl,cntl+hl-1);//继续深度遍历
    xian(mid+1,zr,hr-cntr,hr-1);//继续深度遍历
}
int main() {
    cin>>a>>b;
    xian(0,a.length()-1,0,b.length()-1);//中序遍历现有的数列位0~a.length()-1,后序遍历现有0~b.length()-1
    return 0;
}

猜你喜欢

转载自blog.csdn.net/johnwayne0317/article/details/85853776