题解二叉树遍历

Posted kcn999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解二叉树遍历相关的知识,希望对你有一定的参考价值。

题目描述

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

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

 

输入格式

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

 

输出格式

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

 

输入样例

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;
参考程序

 

以上是关于题解二叉树遍历的主要内容,如果未能解决你的问题,请参考以下文章

复原二叉树 题解

题解二叉树遍历

代码随想录--二叉树

LeetCode 106. 从中序与后序遍历序列构造二叉树 c++/java详细题解

LeetCode 106. 从中序与后序遍历序列构造二叉树 c++/java详细题解

精选力扣500题 第46题 LeetCode 105. 从前序与中序遍历序列构造二叉树c++/java详细题解