据结构与算法(七) 二叉树的遍历

二叉搜索树(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);
    }	
  }
}
复制代码

喜欢的能够关注下个人公众号,会在第一时间更新

相关文章
相关标签/搜索