目录
1.前序遍历(Preorder Traversal)
访问顺序:根左右
java代码实现:
/**
* 前序遍历
*/
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);
}
2.中序遍历(Inorder Traversal)
访问顺序:左根右
java代码实现:
/**
* 中序遍历
*/
public void inorderTraversal() {
preorderTraversal(root);
}
private void inorderTraversal(Node<E> node) {
if(node == null) return;
preorderTraversal(node.left);
System.out.println(node.element);
preorderTraversal(node.right);
}
3.后序遍历(Postorder Traversal)
访问顺序:根左右
java代码实现:
/**
* 后序遍历
*/
public void postorderTraversal() {
preorderTraversal(root);
}
private void postorderTraversal(Node<E> node) {
if(node == null) return;
preorderTraversal(node.left);
preorderTraversal(node.right);
System.out.println(node.element);
}
4.层序遍历(Level Order Traversal)
访问顺序:从上到下,从左到右依次访问每一个节点
实现思路:
1.将根节点入队
2.循环执行以下操作,直到队列为空
- 将队头节点A出队,进行访问
- 将A的左子节点入队
- 将A的右子节点入队
代码实现:
/**
* 层序遍历
*/
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.left);
}
}
}