重建二叉树

  • 问题描述
    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
  • 思路
    采用在数据结构中所使用的方法,先序队列确定头结点,中序队列确定左右部分,采用递归方法,我使用的方法简单易懂,但不是最优的。
  • 代码演示
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    public:
    vector<int> split(vector<int> &vector,int start,int end)
    {
       std::vector<int> ans;
        for(int i=start;i<end;i++)
            ans.push_back(vector[i]);
        return ans;
    }
public:
    //关键时根据中序遍历划分前序遍历
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
       if(vin.size()==0)
           return NULL;
        else
        {
            TreeNode* root=(TreeNode*)malloc(sizeof(TreeNode));
            root->val=pre[0];
            int i;
            for( i=0;i<vin.size();i++)
                if(pre[0]==vin[i])
                    break;
            root->left=reConstructBinaryTree(split(pre,1,1+i),split(vin,0,i));
            root->right=reConstructBinaryTree(split(pre,i+1,pre.size()),split(vin,i+1,vin.size()));
            return root;
        }
    }


    
};

《重建二叉树》

    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bd3aa562b717778ac20aa97
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞