二叉樹定義與演算法應用

2021-10-07 17:24:57 字數 1905 閱讀 7072

每個節點最多含有兩個子樹的樹稱為二叉樹

滿二叉樹

除最後一層無任何子節點外,所有的父親節點都有兩個子節點的二叉樹,填滿了的二叉樹

完全二叉樹

除最後一層外,每一層的節點數均達到最大值;在最後一層上只連續的缺少右邊的一些節點

滿二叉樹和完全二叉樹可以使用乙個陣列來儲存

因為二叉樹滿足

左 兒子

=根∗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 ...