一、介紹
在互聯網公司的筆試題中,經常會出現給出一個二叉樹的前序和中序遍歷,讓你去求它的后序遍歷問題,因此我將這類題型的解題步驟總結如下。
二、例題
題目解析:
注:此題中f節點的爸爸是d。
前序遍歷順序 根->左->右:abefd。
中序遍歷順序 左->根->右:ebadf。
后序遍歷順序 左->右->根:ebfda。
題目解析:
二叉搜索樹有一個很重要的特性:樹中任何結點的左子樹中所有結點的值均比該結點小,右子樹中所有結點的值均比該結點大。對二叉搜索樹進行中序遍歷即得到一個遞增排序的序列。
因此,檢查一個樹是否是二叉搜索樹可以使用中序遍歷,根據遞增排序的序列生成二權搜索樹也可以使用中序遍歷。
參考資料:二叉搜索樹的簡單介紹 二叉排序_搜索_查找樹 C++
題目解析:
1,先序遍歷的第一個節點肯定是根節點,所以A為該二叉樹的根節點。
2,中序遍歷中根節點左側的節點全是根節點左子樹的節點,根節點右側的節點全是根節點的右子樹。所以我們可以分成 DCB(左) | A(根) | EFG(右)。
3,遞歸使用上述兩個步驟,可以畫出整個二叉樹。
(1)先得出A是根節點。
(2)DCB是A左子樹中的點,EFG是A右子樹中的點。
(1)B是A左子樹的根節點,E是A右子樹的根節點。
(2)CD是B左子樹中的點,FG是E右子樹中的點。
(1)C是B左子樹的根節點,F是E右子樹的根節點。
(2)D是C左子樹中的點,G是F右子樹中的點。
因此該二叉樹的后序遍歷為(左->右->根):DCBGFEA。
三、解題感受
遇到這種問題,記得先找出根節點,然后找出根節點左邊的節點和根節點右邊的節點,然后以此類推,找出根節點左子樹的根節點和右子樹的根節點...最后可以根據前序和中序遍歷畫出一個二叉樹,再根據畫出的二叉樹(前提是要保證之前的步驟都正確)求出后序遍歷。