Lintcode73 Construct Binary Tree from Preorder and Inorder Traversal solution 題解

【題目描述】

Given preorder and inorder traversal of a tree, construct the binary tree.

Notice:You may assume that duplicates do not exist in the tree.

根據前序遍歷和中序遍歷樹構造二叉樹.

注意:你可以假設樹中不存在相同數值的節點

【題目鏈接】

www.lintcode.com/en/problem/construct-binary-tree-from-preorder-and-inorder-traversal/

【題目解析】

相信學過數據結構的同學應該都對這道題目有深刻的印象,雖然它是二叉樹的題目,但是其更多使用到的還是分治的思想。

對于給定的前序遍歷preorder和中序遍歷inorder,首先我們不難發現,這棵樹的根結點其實就是preorder[0]。由于preorder和inorder是對同一棵樹的遍歷,我們可以知道preorder[0]在inorder中一定也存在,不妨設preorder[0]==inorder[k]。

由于inorder是中序遍歷,所以k左邊的就是根節點左子樹的中序遍歷、k右邊的就是根節點右子樹的中序遍歷。

并且,由于我們已經知道了根節點左子樹的節點數(與中序遍歷長度相同),不妨設為l,我們可以知道preorder從1到l+1就是根節點左子樹的前序遍歷,剩下的最后一部分就是根節點右子樹的前序遍歷。

也就是說,我們可以計算出左子樹、右子樹的前序遍歷和中序遍歷,從而可以用分治的思想,將規模較大的問題分解成為兩個較小的問題,然后遞歸的進行處理,還原左子樹和右子樹,最后連通根節點一起組成一棵完整的樹。

【參考答案】

www.jiuzhang.com/solutions/construct-binary-tree-from-preorder-and-inorder-traversal/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容