據結構與算法(七) 二叉樹的遍歷

二叉搜索樹(Binary Search Tree)

又稱爲二叉查找樹,二叉排序樹。簡稱爲BSTjava

  • 任意一個節點的值都大於子樹的值node

  • 任意一個節點的值都小於子樹的值post

  • 他的左右子樹也是一顆二叉搜索樹spa

  • 二叉搜索樹能夠大大提升效率(搜索和添加刪除時間複雜度都是logn)code

  • 二叉搜索樹的元素必須是具有可比較性cdn

    • 自定義類型須要指定比較方式
    • 不容許爲null
  • 二叉樹沒有索引的概念blog

二叉搜索樹

二叉樹遍歷

  • 前序遍歷(Preorder Traversal)
  • 中序遍歷(Inorder Traversal)
  • 後序遍歷(Postorder Traversal)
  • 層序遍歷(Level Order Traversal)

所說的序是指根節點的順序排序

二叉樹例子

前序遍歷(Perorder Traversal)

遍歷順序:根節點,左子樹,右子樹索引

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);
	}
複製代碼

中序遍歷(Inrorder Traversal)

遍歷順序:左子樹,根節點,右子樹。

3,6,7,8,9,10,11,12,13

遍歷順序:右子樹,根節點,左子樹。

13,12,11,10,9,8,7,6,3

  • 若是是二叉搜索樹(BST)中序遍歷輸出爲有序數列
/// 中序遍歷
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);
}
複製代碼

後序遍歷(Postorder Traversal)

遍歷順序:左子樹,右子樹,根節點。

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);
}
複製代碼

層序遍歷(Level Order Traversal)

一層一層的訪問, 從上到下 ,從左到右。

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);
    }	
  }
}
複製代碼

喜歡的能夠關注下個人公衆號,會在第一時間更新

相關文章
相關標籤/搜索