码迷,mamicode.com
首页 > 其他好文 > 详细

【题解】二叉树遍历

时间:2019-06-07 19:35:19      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:按层遍历   pre   img   ret   void   spl   std   color   cout   

题目描述

  树和二叉树基本上都有先序、中序、后序、按层遍历等遍历顺序,给定中序和其它一种遍历的序列就可以确定一棵二叉树的结构。

  假定一棵二叉树一个结点用一个字符描述,现在给出中序和按层遍历的字符串,求该树的先序遍历字符串。

 

输入格式

  共两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的中序遍历和按层遍历的序列。

 

输出格式

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

 

输入样例

DBEAC

ABCDE

 

输出样例

ABDEC

 

题解

  根据按层遍历,我们可以知道某个结点的深度,我们又可以在中序遍历的序列中找到当前点所匹配的位置,又可以找到当前结点的左右子树,这样遍历下去即可。

技术图片
#include <iostream>
#include <string>

using namespace std;

string a, b;
void func(int, int, int);

int main()
{
    cin >> a >> b;
    func(0, a.size() - 1, 0);
    return 0;
} 

void func(int lt_a, int rt_a, int obj)
{
    cout << b[obj];
    int pos = a.find(b[obj]);
    //bool op = 0;
    for(register int i = obj + 1; i < b.size(); i++)
    {
        bool is_Break = 0;
        for(register int j = lt_a; j < pos; j++)
        {
            if(a[j] == b[i])
            {
                //if(!op) op = 1, cout << ‘(‘;
                func(lt_a, pos - 1, i);
                is_Break = 1;
                break;
            }
         }
        if(is_Break) break;
    }
    for(register int i = obj + 1; i < b.size(); i++)
    {
        bool is_Break = 0;
        for(register int j = pos + 1; j <= rt_a; j++)
        {
            if(a[j] == b[i])
            {
                //if(!op) op = 1, cout << ‘(‘;
                is_Break = 1;
                func(pos + 1, rt_a, i);
                break;
            }
         }
        if(is_Break) break;
    }
    //if(op) cout << ‘)‘;
    return;
}
参考程序

 

【题解】二叉树遍历

标签:按层遍历   pre   img   ret   void   spl   std   color   cout   

原文地址:https://www.cnblogs.com/kcn999/p/10988836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!