每個節點最多含有兩個子樹的樹稱為二叉樹
滿二叉樹
除最後一層無任何子節點外,所有的父親節點都有兩個子節點的二叉樹,填滿了的二叉樹
完全二叉樹
除最後一層外,每一層的節點數均達到最大值;在最後一層上只連續的缺少右邊的一些節點
滿二叉樹和完全二叉樹可以使用乙個陣列來儲存
因為二叉樹滿足
左 兒子
=根∗2
−−−−
−右兒子
=根∗2
+1−−
−−−根
=兒子/
2左兒子=根*2----- 右兒子=根*2+1 ----- 根=兒子/2
左兒子=根∗
2−−−
−−右兒
子=根∗
2+1−
−−−−
根=兒子
/2二叉樹的先序遍歷,中序遍歷,後序遍歷和層次遍歷
先序:a->b->d->g->h->c->e->i->f->j
中序:g->d->h->b->a->e->i->c->j->f
後序:g->h->d->b->i->e->j->f->c->a
已知前序中序求後序
前abcdfe 中:badfce
還原的二叉樹
後序遍歷
程式實現
epilogue(int ql,int qr,int zl,int zr)方法四個引數分別表示 前序的子樹起點和終點,後序的子樹起點和終點
用for迴圈找到父節點,然後拆分成左右子樹,遞迴求解
拆分出來的左子樹,在中序上的位置,起點為zl不變,終點為i-1 (父節點前乙個位置),在前序上的位置,開始的位置為 (ql+1)父節點+1,終點為ql+i-zl(起點位置+剛才計算的中序子樹長度)
拆分出來的右子樹,在中序位置的起點為i+1(父節點的後乙個位置),終點位置為zr(不變), 在前序上的位置,結束位置為qr(不變),開始位置=結束位置-剛才計算的中序子樹長度(qr-zr+i+1)
最後輸出根節點就是後序遍歷的結果,如果子樹只剩一下乙個節點那麼直接輸出並且返回
public
class 前序中序求後序
// ql前序起點 qr前序終點 zl中序起點 zr中序終點
static
void
epilogue
(int ql,
int qr,
int zl,
int zr)
for(
int i = zl; i <=zr; i++)}
}}
樹與二叉樹定義
樹是n n 0 個節點的有限集合t。當n 0時,稱為空樹 當n 0時,該集合滿足如下條件 1.其中必有乙個稱為根 root 的特定節點,它沒有直接前驅,但又0個或多個直接後繼 2.其餘節點可分為m m 0 個互不相交的有限集t1 t2 tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹 suntr...
樹與二叉樹 定義
樹形結構是一類重要的非線性結構資料結構。其中以樹和二叉樹最為常用,直 來,樹是以分支關係定義的層次結構。樹的定義與基本術語 樹的結構定義是乙個遞迴定義,即在樹的定義中又用到樹的概念。除了樹形表示外,樹形結構還有廣義表表示 文氏圖表示 反映集合包含關係 和凹人表示 類似一本書的目錄 等其他表示形式。結...
二叉樹應用
1 專案要求 建立一棵二叉樹 前序 中序 層次非遞迴遍歷該二叉樹 判斷該二叉樹是否為二叉排序樹 如果是二叉排序樹,進行結點的插入或刪除 輸出結果 2 解題思路 首先設計乙個結構體,確定需要輸入的資料型別,再設計乙個結構體,用來存放左右孩子的指標。輸入資料建立乙個二叉樹,首先輸入左子樹的資料,以 0 ...