二叉树的中序遍历和后序遍历 (Ver. I)

Posted szu-ds-wys

tags:

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

题目描述

按中序遍历和后序遍历给出一棵二叉树,求这棵二叉树中叶子节点权值的最小值。

输入保证叶子节点的权值各不相同。

输入

测试数据有多组
对于每组测试数据,首先输入一个整数N (1 <= N <= 10000),代表二叉树有N个节点,接下来的一行输入这棵二叉树中序遍历的结果,最后一行输入这棵二叉树后序遍历的结果
输入一直处理到文件尾(EOF)

输出

对于每组测试数据,输出一个整数,代表二叉树中叶子节点权值最小值

样例输入

7 3 2 1 4 5 7 6 3 1 2 5 6 7 4 8 7 8 11 3 5 16 12 18 8 3 11 7 16 18 12 5 1 255 255

样例输出

1 3 255

提示

#include<iostream>
using namespace std;
class BitreeNode
{
public:
    int data;
    BitreeNode *left;
    BitreeNode *right;
    BitreeNode()
    {
        left=right=NULL;
    }
};
  
class Bitree
{
public:
    BitreeNode *Root;
    int * inorder;
    int * pastorder;
    int len;
    int Min;
    Bitree(int n,int *i,int *p)
    {
        Min=99999;
        inorder=i;
        pastorder=p;
        len=n;
        Root=makeTree(0,len-1,len-1);
    }
    BitreeNode *makeTree(int inleft,int inright,int root)
    {
        if(inright<inleft)
        {
            return NULL;
        }
        int newroot;
        BitreeNode *T=new BitreeNode();
        for(int i=inleft;i<=inright;i++)
        {
            if(inorder[i]==pastorder[root])
            {
                newroot=i;
                break;
            }
        }
        T->data=pastorder[root];
        T->left=makeTree(inleft,newroot-1,root-1-(inright-newroot));
        T->right=makeTree(newroot+1,inright,root-1);
        return T;
    }
    void Pre(BitreeNode *p)
    {
        if(p!=NULL)
        {
            if(p->left==NULL&&p->right==NULL)
            {
                if(p->data<Min)
                    Min=p->data;
            }
            Pre(p->left);
            Pre(p->right);
        }
    }
};
  
int main()
{
    int n;
    while(cin>>n)
    {
        int inorder[10001],pastorder[10001];
        for(int i=0;i<n;i++)
            cin>>inorder[i];
        for(int i=0;i<n;i++)
            cin>>pastorder[i];
        Bitree T(n,inorder,pastorder);
        T.Pre(T.Root);
        cout<<T.Min<<endl;
    }
    return 0;
}

以上是关于二叉树的中序遍历和后序遍历 (Ver. I)的主要内容,如果未能解决你的问题,请参考以下文章

通过二叉树的中序序列和后序序列获取前序序列

已知二叉树的中序序列和后序序列,怎么求前序序列

LeetCode94. 二叉树的中序遍历

LintCode(72)中序遍历和后序遍历树构造二叉树

二叉树进阶题------前序遍历和中序遍历构造二叉树;中序遍历和后序遍历构造二叉树

二叉树进阶题------前序遍历和中序遍历构造二叉树;中序遍历和后序遍历构造二叉树