二叉樹總結 建樹和4種遍歷方式(遞迴 非遞迴)

2021-12-29 23:38:22 字數 2443 閱讀 6573

今天總結一下二叉樹,要考離散了,求不掛!二叉樹最重要的就是 建立、4種遍歷方式,簡單應用,如何判斷兩顆二叉樹是否相似

二叉樹分為 :1、完全二叉樹 2、滿二叉樹

結構性質:

1).滿二叉樹 高度為h ,節點數則為 2^h - 1,且葉子節點全在最下層,且葉子節點數為2^(n-1)個{n代表二叉樹層數,也叫深度}

2).n個節點的 完全二叉樹 深度為 int(log2n)(以2為底n的對數)+ 1;

3).非空二叉樹 葉子節點個數==雙分支節點數+1

4).非空二叉樹 某節點編號 n 若有左孩子,則左孩子節點 2*n,若有右孩子,則其節點編號為2*n+1

5).知道其中兩種遍歷方式,就可知第三種遍歷方式。

6).判斷倆顆二叉樹是否相同,只需判斷他們任意倆種相對應的遍歷順序即可

建樹:已知輸入的字元為某顆二叉樹的先序序列,如abcxxdexgxxf***

(其中x表示空節點),建立二叉樹

遍歷方式:

遍歷方式很重要,首先要知道如何遍歷,才能打出**,現在腦海裡模擬一遍

一、先序遍歷

1.先訪問根節點

2.再訪問左分支

3.再訪問右分支

上述二叉樹的先序遍歷:abdgcef

二、中序遍歷

1.先訪問左分支

2.在訪問根節點

3.再訪問右分支

上述二叉樹的中序遍歷:dgbaecf

三、後續遍歷

1.先訪問左分支

2.再訪問右分支

3.再訪問根節點

上述二叉樹的後序遍歷:gdbefca

四、層次遍歷

就是從每一層按照從左至右的順序,一次遍歷該層所有的節點

採用環形佇列的方法,進行訪問

訪問葉子節點

上述遞迴示意圖如下:

二叉樹的深度

從當前節點的左右分支開始判斷,誰大自增1

判斷倆顆二叉樹是否相似

1.所有節點的對應左右孩子都相同

2.如過 有任意倆種遍歷方式相同,那麼倆顆樹就相同

**模版:

#include

#include

#include

#include

#include

const int n = 1010;

using namespace std;

char a[100];

struct node;

struct node *make()

return st;

}void first_order(struct node *t )//先序遍歷的遞迴形式

void first_order_1(struct node *t)//先序遍歷非遞迴形式

if(p->left!=null)//左孩子進棧}}

}void mid_order(struct node *t)//中序遍歷遞迴形式

void mid_order_1(struct node *t)//先序遍歷非遞迴形式

//while結束後,棧頂元素可能沒有左分支節點或者左分支節點已經訪問完畢

if(top>-1)}}

}void last_order(struct node *t)//後序遍歷遞迴形式

void print_leaf(struct node *t)

print_leaf(t->left);//訪問左分支的葉子節點

print_leaf(t->right);//訪問右分支的葉子節點

}}void ceng_order(struct node *t)//層次遍歷,採用環形佇列來實現

if(p->right !=null) // 將其右孩子 壓入佇列

}}int shendu(struct node *t)

else

return 0;

}/*bool like(struct node *t1,struct node *t2)//判斷倆顆樹是否相似

}*/int main()

{ struct node *t;

t = make();//建樹

puts("先序遍歷,遞迴形式");

first_order(t);

cout<

二叉樹建樹 遍歷

首先需要乙個結構體,表示每乙個結點 typedef struct node btnode 然後就可以直接建樹了 示例是按前序遍歷 關於前序遍歷後面有解釋 建樹 void build btnode t t data data t lchild null t rchild null build t lc...

二叉樹建樹

給出前序和中序建樹 node build int n,int pre,int in 給出中序和後序建樹 node build int n,int in,int pos uva 548 給你一棵樹的中序和後序遍歷,求從根到葉子組成的路徑中數字和最小的那條,輸出最小路徑的葉子。思路 在重建完二叉樹後,d...

二叉樹的遍歷方式總結

問題描述 當我們建立了乙個二叉樹的結構時,對於該樹的遍歷方式有好幾種方式,我們有時會在筆試或面試中碰到諸如要求寫出某一種或某幾種二叉樹的遍歷方式的函式,在此將二叉樹的比那裡方式予以總結,對於前序,中序,後序這三種方式也存在遞迴和非遞迴的形式,而層序遍歷方式以非遞迴的方式予以實現,至於還有何其他的方式...