栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《105. 从前序与中序遍历序列构造二叉树C++》 和《106. 从中序与后序遍历序列构造二叉树C++》

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《105. 从前序与中序遍历序列构造二叉树C++》 和《106. 从中序与后序遍历序列构造二叉树C++》

105. 从前序与中序遍历序列构造二叉树 链接:

链接: 105. 从前序与中序遍历序列构造二叉树C++

描述:


代码:
class Solution {
public:
    TreeNode* _buildTree(vector& preorder, vector& inorder,
        int& prei,int inbegin,int inend){
            if(inbegin>inend) return NULL;
            TreeNode* root = new TreeNode(preorder[prei]);
            int rooti = inbegin;
            while(rooti<=inend){
                if(inorder[rooti]==preorder[prei]){
                    break;
                }
                else{
                    ++rooti;
                }
            }
            ++prei;
            root->left=_buildTree(preorder,inorder,prei,inbegin,rooti-1);
            root->right=_buildTree(preorder,inorder,prei,rooti+1,inend);
            return root;
    }

    TreeNode* buildTree(vector& preorder, vector& inorder) {
        int prei = 0;
        return _buildTree(preorder,inorder,prei,0,inorder.size()-1);
    }
};
解析:

106. 从中序与后序遍历序列构造二叉树 链接:

链接: 106. 从中序与后序遍历序列构造二叉树

描述:


代码:
class Solution {
    int post_idx;
    unordered_map idx_map;
public:
    TreeNode* helper(int in_left, int in_right, vector& inorder, vector& postorder){
        if (in_left > in_right)  return nullptr;

        int root_val = postorder[post_idx];
        TreeNode* root = new TreeNode(root_val);

        int index = idx_map[root_val];

        post_idx--;
        root->right = helper(index + 1, in_right, inorder, postorder);
        root->left = helper(in_left, index - 1, inorder, postorder);
        return root;
    }
    TreeNode* buildTree(vector& inorder, vector& postorder) {
        post_idx = (int)postorder.size() - 1;

        int idx = 0;
        for (auto& val : inorder) {
            idx_map[val] = idx++;
        }
        return helper(0, (int)inorder.size() - 1, inorder, postorder);
    }
};
解析:

中序:确定左右子树
后序:从后往前,确定根节点

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883302.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号