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

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

++ amp src 圖片 ima 遍歷序列 tree cto 建立

技術分享圖片

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

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

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