zoukankan      html  css  js  c++  java
  • LeetCode 105. 从前序遍历与中序遍历序列构造二叉树

    题目描述链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

    解题思路:递归法。前序遍历    根  左子树   右子树       中序遍历为  左子树 根 右子树

    由此我们根据前序序列获得根,然后在中序序列中定位根的位置,便可得到根的左子树

    与右子树序列之后对于左子树与右子树递归的进行此操作。最终实现解题。

    LeetCode C++求解代码如下:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        unordered_map<int,int>index;
        TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
            for(int i=0;i<inorder.size();++i){
                index[inorder[i]]=i;
            }
            return fun(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1);
        }
    
        TreeNode* fun(vector<int>& preorder,vector<int>& inorder,int pre_left,int pre_right,int in_left,int in_right){
                    
                if(pre_left>pre_right){
                    return NULL;
                }    
    
                int tree_root=preorder[pre_left];//树根
                int temp=index[tree_root];//中序中树根位置
                TreeNode *root=new TreeNode(tree_root);
                int size=temp-in_left;
             root->left=fun(preorder,inorder,pre_left+1,pre_left+size,in_left,temp-1);
             root->right=fun(preorder,inorder,pre_left+size+1,pre_right,temp+1,in_right);
             return root;
    
    
    
        }
    
    };
  • 相关阅读:
    缓存清理
    机器学习在电商领域三大应用,推荐,搜索,广告中商品排序
    并发和并行
    拷贝控制
    gitk
    git GUI Clients
    new delete
    Windows 安装 gcc
    C++ 运算符优先级
    iostream 操作符
  • 原文地址:https://www.cnblogs.com/zzw-/p/13492447.html
Copyright © 2011-2022 走看看