傳統(tǒng)網(wǎng)站有沒有建設(shè)必要建網(wǎng)站賺錢
二叉樹的種類:
滿二叉樹:樹的所有節(jié)點都是滿,即都有左右孩子。
這棵二叉樹為滿二叉樹,也可以說深度為k,有2^k-1個節(jié)點的二叉樹。
完全二叉樹:完全二叉樹的定義如下:在完全二叉樹中,除了最底層節(jié)點可能沒填滿外,其余每層節(jié)點數(shù)都達到最大值,并且最下面一層的節(jié)點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1~?2^(h-1) ?個節(jié)點。
?二叉搜索樹:二叉搜索樹是一顆排序樹。
- 若它的左子樹不空,則左子樹上所有結(jié)點的值均小于它的根結(jié)點的值;
- 若它的右子樹不空,則右子樹上所有結(jié)點的值均大于它的根結(jié)點的值;
- 它的左、右子樹也分別為二叉排序樹
?平衡二叉搜索樹:又被稱為AVL(Adelson-Velsky and?Landis)樹,且具有以下性質(zhì):它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。
二叉樹的存儲方式:
二叉樹可以鏈式存儲,也可以順序存儲。
那么鏈式存儲方式就用指針, 順序存儲的方式就是用數(shù)組。
鏈式存儲:使用鏈表
?順序存儲:使用數(shù)組的方式
查找節(jié)點:如果父節(jié)點的數(shù)組下標是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。
但是用鏈式表示的二叉樹,更有利于我們理解,所以一般我們都是用鏈式存儲二叉樹。
二叉樹的遍歷方式:
二叉樹主要有兩種遍歷方式:
- 深度優(yōu)先遍歷:先往深走,遇到葉子節(jié)點再往回走。
- 廣度優(yōu)先遍歷:一層一層的去遍歷。
那么從深度優(yōu)先遍歷和廣度優(yōu)先遍歷進一步拓展,才有如下遍歷方式:
- 深度優(yōu)先遍歷
- 前序遍歷(遞歸法,迭代法)
- 中序遍歷(遞歸法,迭代法)
- 后序遍歷(遞歸法,迭代法)
- 廣度優(yōu)先遍歷
- 層次遍歷(迭代法)
前中后遍歷其實就是看根節(jié)點的位置。在中間就是中序;在前面就前序;在后面就是后序遍歷。
- 前序遍歷:中左右
- 中序遍歷:左中右
- 后序遍歷:左右中
二叉樹的定義:
java的定義:
public class TreeNode {int value;TreeNode left;TreeNode right;//無參數(shù)構(gòu)造器:TreeNode(){}TreeNode(int value){this.value=value;}//有參數(shù)構(gòu)造器:public TreeNode(int value, TreeNode left, TreeNode right) {this.value = value;this.left = left;this.right = right;}
}
python的定義:
class TreeNode: def __init__(self, value):self.value = valueself.left = Noneself.right = None
C++的定義:
struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};