根据二叉树的先序遍历和中序遍历还原二叉树并且求二叉树的高度

Posted x-huihui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据二叉树的先序遍历和中序遍历还原二叉树并且求二叉树的高度相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<string>
using namespace std;
string s1, s2;
class Tree
{
public:
    char c;
    Tree *left;
    Tree *right;
};
Tree* create()
{
    Tree *p = new Tree;
    p->left = p->right = NULL;
    return p;
}


Tree* huanyuan(int x1, int x2, int y1, int y2)
{
    Tree *t = create();

    t->c = s1[x1];
    for (int j = y1; j <= y2; j++)
    {
        if (s1[x1] == s2[j])
        {
            if (j != y1)
                t->left = huanyuan(x1 + 1, x1 + j - y1, y1, j - 1);
            if (j != y2)
                t->right = huanyuan(x1 + j - y1 + 1, x2, j + 1, y2);
            break;
        }
    }
    return t;
}
int shendu(Tree *t)
{
    if (t == NULL)
        return 0;
    int m = shendu(t->left);
    int n = shendu(t->right);
    if (m > n)
        return m + 1;
    else
        return n + 1;
}
int main()
{
    int n;
    cin >> n;
    cin >> s1 >> s2;
    Tree *t = huanyuan(0, s1.size() - 1, 0, s2.size() - 1);
    cout << shendu(t);
}

 

以上是关于根据二叉树的先序遍历和中序遍历还原二叉树并且求二叉树的高度的主要内容,如果未能解决你的问题,请参考以下文章

已知一个二叉树的先序序列和中序序列,怎么求它的后序序列

根据二叉树的先序遍历和中序遍历, 得出二叉树的后续遍历

pascal给出一棵二叉树的中序与后序排列。求出它的先序排列(帮忙解释一下程序)

根据二叉树的先序遍历和中序遍历建立二叉树

通过遍历序列构造二叉树(扩展二叉树的先序先序和中序后序和中序层序和中序)附可执行完整代码

PTA 7-23 还原二叉树