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

本文介绍了一种使用前序遍历和中序遍历来重构二叉树的算法。通过递归方式创建节点,并利用vector存储整数序列,最终实现二叉树的重构。示例代码展示了如何使用该算法及主函数调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;

  struct TreeNode {
      int val;
      TreeNode *left;
      TreeNode *right;
      TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  };

class Solution {
public:
    void createTree(vector<int>&pre,vector<int>&vin,int pre_left,int vin_left,int vin_right,TreeNode*& p){
        if(vin_left>vin_right)
            return;
        p = new TreeNode(pre[pre_left]);
        for(int i=vin_left;i<=vin_right;i++){
            if(vin[i]==pre[pre_left]){
            createTree(pre,vin,pre_left+1,vin_left,i-1,p->left);
            createTree(pre,vin,pre_left+i+1-vin_left,i+1,vin_right,p->right);
            break;
            }
        }

    }
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
         TreeNode* root;
         createTree(pre,vin,0,0,int(vin.size()-1),root);
         cout<<(root->val);
         return root;
    }
};
int main(){
    vector<int>pre={1,2,4,7,3,5,6,8};
    vector<int>vin={4,7,2,1,5,3,8,6};
    Solution ss;
    ss.reConstructBinaryTree(pre,vin);
}

转载于:https://www.cnblogs.com/qiuhaifeng/p/11559928.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值