根据中序和前序遍历还原二叉树

Posted jianbo1995

tags:

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

思路就是从前序遍历出发,到中序遍历中找到相应的根节点,然后确定左子树和右子树的范围

struct BiNode
{
    int value;
    BiNode *leftchild;
    BiNode *rightchild;
};


class solution
{
public:
     BiNode* BiTree(int *preorder,int *midorder,int length)
    {
        if(length < 0 || preorder == nullptr || midorder == nullptr)
            return nullptr;
        return constructTree(preorder,preorder+length,midorder,midorder+length);
    }
    BiNode* constructTree(int* pre,int* pre_end,int* mid,int* mid_end)
    {
        int rootValue = pre[0];
        BiNode* root = new BiNode();
        root->value = rootValue;
        root->leftchild = nullptr;
        root->rightchild = nullptr;

        if(pre == pre_end) //×ó×ÓÊ÷½áÊø
        {
            if(mid == mid_end && mid == pre)
                return root;
            else
                throw std::exception("Invalid input.")
        }
        int* root_index = mid;

        while( root_index <=mid_end &&*root_index != rootValue)
            root_index++;

        int left_length = root_index - mid;
        int* left_end = pre + left_length;
        if(left_length > 0)
        {
            root->leftchild = constructTree(pre+1,pre_end,mid,root_index-1);
            root->rightchild = constructTree(pre+1,pre_end,root_index+1,mid_end);

        }
        return root;
    }
};

最近开学,都没有什么时间继续学习这方面的东西了,o(╥﹏╥)o

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

已知中序和前序重建二叉树

488,二叉树的Morris中序和前序遍历

请教,如何在知道中序和前序遍历的情况下,得到后序遍历的结果? 不需要程序,有个图就行。 谢谢。

LeetCode106. Construct Binary Tree from Inorder and Postorder Traversal-通过中序和后续遍历还原二叉树

中序和后序遍历构造二叉树

还原二叉树(25 分)(已知前序和中序)