樹與二叉樹

2021-09-29 11:34:00 字數 3016 閱讀 1974

根節點:根節點是乙個沒有雙親結點的結點,一課樹最多只能有乙個根節點

結點:樹上面的所有資料都是結點,但結點不只包括資料,還包含指向子樹的分支

結點的度:結點擁有子樹或分支的個數

樹的度:樹中各結點的最大值

結點的層數:根結點的層數為0,其他結點的層數等於其父結點的層數加1

樹的深度:樹中所有結點層數的最大值

樹的高度:數的深度加1

葉子結點:沒有孩子結點的結點

ab                               c

d          e         f                    g

h    i

樹的前序遍歷操作定義為:

訪問根結點

按照從左到右的順序前序遍歷根結點的每一棵子樹。

a b d e h i f c g

樹的後序遍歷操作定義為:

按照從左到右的順序後序遍歷根結點的每一棵子樹

訪問根結點。

d h i e f b g c a

樹的層序遍歷操作定義為:

從樹的第一層(即根結點)開始,自上而下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。

a b c d e f g h i

二叉樹的遍歷:

ab                     c

d                        e           f

g前序遍歷

訪問根結點

前序遍歷根結點的左子樹

前序遍歷根結點的右子樹。

a b d g c e f

中序(根)遍歷

中序遍歷根結點的左子樹

訪問根結點

中序遍歷根結點的右子樹。 

d g b a e c f

後序(根)遍歷

後序遍歷根結點的左子樹

後序遍歷根結點的右子樹

訪問根結點;

g d b e f c a

層序遍歷

二叉樹的層次遍歷是指從二叉樹的第一層開始,

從上至下逐層遍歷,在同一層中,則按從左到右的順序對結點逐個訪問。

a b c d e f g

二叉樹的順序儲存

以結點在完全二叉樹中的位置層序遍歷編號,按編號存入線性表

void create(char preorder,char inorder,int start_p, int end_p,int start_i,int end_i, char data,int root)

}data[root]=preorder[start_p];

create(preorder,inorder,start_p+1,start_p+k-start_i,start_i,k-1,data, 2*root);

create(preorder,inorder,start_p+k-start_i+1,end_p,k+1,end_i,data,2*root+1);

}return ;

}int main()

二叉鍊錶

結點結構

lchild      data     rchild

左孩子    資料      右孩子

template

struct node

;類的宣告

template

class bitree

void inorder()  

void postorder()  

void levelorder();

private:

binode*root; 

binode* creat( ); 

void release(binode*root);

void preorder(binode*root); 

void inorder(binode*root); 

void postorder(binode*root); 

void levelorder(binode*root);

};前序遍歷(遞迴)

template  

void   bitree::preorder(binode*root) 

}template  

void   bitree::preorder(binode*root)

}template  

void   bitree::preorder(binode*root)

}template  

void   bitree::preorder(binode*root)  

}中序遍歷(遞迴)

template

class bitree 

void inorder()  

void postorder()  

void levelorder();

private:

binode*root; 

void creat(binode*& root); 

void release(binode*root);

void preorder(binode*root); 

void inorder(binode*root); 

void postorder(binode*root); 

void levelorder(binode*root);

};template

void bitree::creat(binode* &root  ) }

統計葉子節點的數目

增加乙個資料成員,leafcount, 初值為0

對樹進行遍歷。 如果乙個節點是葉子,則將leafcount+1;

可以在前序、中序或後序的遍歷過程中進行計算。

演算法分析

從根節點出發

判斷當前節點是否是葉子節點,如果是,則葉子數+1

否則,在左子樹中遍歷,並統計葉子節點的數目,在右子樹中進行遍歷,並統計葉子節點的數目

template

void bitree:: countleaf(bitreenode* root)

}return;

}

二叉樹 滿二叉樹與完全二叉樹

二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...

樹與二叉樹

樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 n 0時為空樹 n 0時,有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的...

樹與二叉樹

建立 先序二叉樹,中序二叉樹,後序二叉樹。給定兩種遍歷序列 前序中序或後序中序 重塑二叉樹 遍歷 判斷乙個節點是否存在於二叉樹中 二叉樹的遍歷 先序,中序,後序 遞迴 非遞迴 層次遍歷 從上到下或從下到上列印 zigzag遍歷方式層次遍歷 二叉樹性質 二叉樹中葉子節點的個數 二叉樹第k層節點數目 二...