又稱爲二叉查找樹,二叉排序樹。簡稱爲BSTjava
任意一個節點的值都大於其左子樹的值node
任意一個節點的值都小於其右子樹的值post
他的左右子樹也是一顆二叉搜索樹spa
二叉搜索樹能夠大大提升效率(搜索和添加刪除時間複雜度都是logn)code
二叉搜索樹的元素必須是具有可比較性cdn
二叉樹沒有索引的概念blog
所說的序是指根節點的順序排序
遍歷順序:根節點,左子樹,右子樹索引
10,8,6,3,7,8,9,12,11,13隊列
/// 前序遍歷
public void preorderTraversal() {
preorderTraversal(root);
}
private void preorderTraversal(Node<E> node) {
if (node == null) {
return;
}
System.out.println(node.element);
preorderTraversal(node.left);
preorderTraversal(node.right);
}
複製代碼
遍歷順序:左子樹,根節點,右子樹。
3,6,7,8,9,10,11,12,13
遍歷順序:右子樹,根節點,左子樹。
13,12,11,10,9,8,7,6,3
/// 中序遍歷
public void inorderTraversal() {
inorderTraversal(root);
}
private void inorderTraversal(Node<E> node) {
if (node == null) {
return;
}
inorderTraversal(node.left);
System.out.println(node.element);
inorderTraversal(node.right);
}
複製代碼
遍歷順序:左子樹,右子樹,根節點。
3,7,6,9,8,11,13,12,10
遍歷順序:右子樹,左子樹,根節點。
13,11,12,9,7,3,6,8,10
/// 後序遍歷
public void postorderTraversal() {
postderTraversal(root);
}
private void postderTraversal(Node<E> node) {
if (node == null) {
return;
}
postderTraversal(node.left);
postderTraversal(node.right);
System.out.println(node.element);
}
複製代碼
一層一層的訪問, 從上到下 ,從左到右。
10,8,9,6,9,11,13,3,7
利用隊列
一、將跟節點入隊
二、while(隊列不爲空){
將隊頭節點出隊 進行訪問
將隊頭左右子節點分別入隊
}
///層序遍歷
public void levelOrderTraversal() {
if (root == null) {
return;
}
Queue<Node<E>> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
Node<E> node = queue.poll();
System.out.println(node.element);
if(node.left != null) {
queue.offer(node.left);
}
if(node.right!= null) {
queue.offer(node.right);
}
}
}
複製代碼
喜歡的能夠關注下個人公衆號,會在第一時間更新