105. Construct Binary Tree from Preorder and Inorder Traversal【力扣】

题意理解

给出先序和中序序列,构造二叉树。

问题分析

其他

链接

    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return helper(preorder, 0, inorder, 0, inorder.size() - 1);  //先序序列,先序起点,中序序列,中序起点,中序终点
    }
    TreeNode* helper(vector<int>& preorder, int pstart, vector<int>& inorder, int istart, int iend)
    {
        if (istart > iend)    //中序起点大于终点
            return NULL;    //递归终止
        int val = preorder[pstart];    //取出先序第一个值
        TreeNode* root = new TreeNode(preorder[pstart]);    //构造根节点
        int i = 0;    //查找左右子树分隔点
        for (i = istart; i != iend; i ++)
        {
            if (val == inorder[i])    //找到了就结束查找
            {
                break;
            }
        }
        root -> left = helper(preorder, pstart + 1, inorder, istart, i - 1);//构造左子树,指定中序序列起终点
        root -> right = helper(preorder, pstart + (i - istart + 1), inorder, i + 1, iend);//构造右子树,指定先序起点(利用中序序列root的位置),中序序列起终点
        return root;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值