兩個二叉樹相關的常見題目

2021-09-16 19:43:38 字數 1494 閱讀 9798

前記:這一章課件裡主要講了樹和二叉樹的屬性和一些常用的操作。下面針對二叉樹的遍歷舉乙個具體的例子,這個題目在等級考試或者面試中都經常出現,大家多思考一下。

題目描述:

已知二叉樹前序遍歷和中序遍歷分別為:abdegcfh和dbgeachf,則該二叉樹的後序遍歷為?

答案:

dgebhfca

解題思路:

先序遍歷的第乙個結點是根結點,所以a是根;

然後在中序遍歷中找到a,(dbge)a(chf);

由中序遍歷的定義知(dbge)是左子樹的中序遍歷,(chf)是右子樹的中序遍歷。

然後在先序遍歷中把左子樹和右子樹劃開,a(bdeg)(chf),所以b是左子樹根,c是右子樹根。

然後繼續在中序遍歷中找到b和c,((d)b(ge))a(c(hf))。

對於dbeg,b是根,d是左子樹,eg是右子樹的中序遍歷,對於chf,c是根,hf是右子樹的中序遍歷。因為仍然有沒劃分完的部分,所以繼續看先序。

對於bdeg,b是根已知,d是整個左子樹已知,所以eg是右子樹的先序遍歷,e是右根,再對照中序可知g是e的左子樹,chf同理。

所以樹的結構是a(b(d,e(g,)),c(,f(h,)))

把它畫成圖,後序遍歷就是dgebhfca

總之先序序列是用來確定根結點,中序序列是用來劃分出左右子樹。

題目:

建立一棵二叉樹,並對其進行遍歷(先序、中序、後序),列印輸出遍歷結果

[基本要求]

從鍵盤接受輸入(先序),以二叉鍊錶作為儲存結構,建立二叉樹(以先序來建立),並採用遞迴演算法對其進行遍歷(先序、中序、後序),將遍歷結果列印輸出。

[測試資料]

abc  de g  f   (其中 表示空格字元)

則輸出結果為

先序:abcdegf

中序:cbegdfa

後序:cgbfdba

c語言描述的方法:

//示例的是先序遍歷,其它的可以在這個基礎上改。

#include#includetypedef struct tnode

tnode;

tnode *tree_creat(tnode *t)

return t;

}void preorder(tnode *t)

}void main()

'); (window.slotbydup = window.slotbydup || ).push(); })();

'); (window.slotbydup = window.slotbydup || ).push(); })();

二叉樹的相關題目

目錄 1 求二叉樹的遍歷順序為自下至上,自右至左的層序遍歷序列 2 判斷二叉樹是否為完全二叉樹 3 統計二叉樹中雙分支結點的個數 4 求先序遍歷序列中第k個結點的值 5 求二叉樹的高度 6 判斷二叉樹是否為二叉排序樹 7 求出二叉排序樹中結點所在的層數 演算法思想 使用層序遍歷。二叉樹正常的層序遍歷...

合併兩個二叉樹

給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 3 2...

兩個二叉樹的問題

乙個以1為根的帶權二叉樹,每個點都有個權值 vi v i。求每乙個點的左右關聯點個數。倍增快速跳即可,如下 include using namespace std define r register define maxn 1000005 int n,v maxn lson maxn rson ma...