1. 程式人生 > >【leetcode 105. 從前序與中序遍歷序列構造二叉樹】解題報告

【leetcode 105. 從前序與中序遍歷序列構造二叉樹】解題報告

nullptr treenode ref != 圖片 lan size htm amp

技術分享圖片

前往 中序,後序遍歷構造二叉樹, 中序,前序遍歷構造二叉樹

    TreeNode* build(vector<int>& preorder, int l1, int r1, vector<int>& inorder, int l2, int r2)
    {
        if (l1>r1) return nullptr;
        int x=preorder[l1], i=0;    // 確定當前根節點
        for(i=l2;inorder[i]!=x&&i<r2;++i);  // 在中序遍歷序列中找到當前根節點位置(該位置可以劃分出左右兩個分支)
int llen=i-l2; // 左子樹結點數量 int rlen=r2-i; // 右子樹結點數量 TreeNode *p = new TreeNode(x); // 建立根節點 p->left = build(preorder, l1+1, l1+llen, inorder, l2, l2+llen-1); // 遞歸建立左子樹,+1,-1是把當前根節點位置去掉 p->right= build(preorder, r1-rlen+1, r1, inorder, r2-rlen+1, r2); //
遞歸建立右子樹,+1,+1是把當前根節點位置去掉 return p; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { return build(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1); }

【leetcode 105. 從前序與中序遍歷序列構造二叉樹】解題報告