首页 > 其他 > 详细

入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

时间:2020-07-13 16:09:23      阅读:65      评论:0      收藏:0      [点我收藏+]

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如,给出

前序遍历 preorder =?[3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:

3

/
9 20
/
15 7

限制:

0 <= 节点个数 <= 5000

注意:本题与主站 105 题重复:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * 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:
    using iter = vector<int>::iterator;
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if( (preorder.size() != inorder.size()) || preorder.empty()) return nullptr;
        return process( preorder.begin() ,preorder.end(),inorder.begin(),inorder.end());
    }
    struct TreeNode* process(iter pstart, iter pend, iter istart , iter iend){

        if(istart == iend) return nullptr;
        struct TreeNode* cur = new struct TreeNode(*pstart);
        iter root = find(istart, iend, *pstart);
        cur->left =  process(pstart+1, pstart +1 +(root-istart), istart,root);
        cur->right = process(pstart+1 +(root-istart), pend, root+1, iend);
        return cur;
    }
};

入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

原文:https://www.cnblogs.com/zhilong233/p/13292969.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!