数据结构之二叉树篇卷二 -- 二叉树递归遍历(With Java)

一、先序递归遍历(Preorder Recursive Traversal)

1.1 算法

  首先需要明确的是这里的序是针对 root 节点而言的。故先序即先“访问”根节点,其次“访问”其左右节点。

1.2 图示

1.3 代码

  Talk is cheap, show me the code!    -- Linus Benedict Torvalds

1     public void preOrder(Node<E> root){
2         if(root != null) {
3             System.out.print(root.data);
4             System.out.print('\t');
5             preOrder(root.lnode);
6             preOrder(root.rnode);
7         }
8     }

二、中序递归遍历(Inorder Recursive Traversal)

2.1 算法

  从根节点 root 出发,先“访问”左子树(Left Subtree),当左子树的每个节点都“访问”完后,才访问根节点,最后“访问”右子树(Right Subtree)。

2.2 图示

2.3 代码

 1  public void inOrder(Node<E> root){
 2         if(root != null) {
 3             //track to the deepest left branch
 4             inOrder(root.lnode);
 5             //visit the root node
 6             System.out.print(root.data);
 7             System.out.print('\t');
 8             inOrder(root.rnode);
 9         }
10     }

 

三、后序递归遍历(Postorder Recursive Traversal)

3.1 算法

  根节点是最后“访问”的,不管是在根节点所在的整棵树,还是根节点以下的子树都是先“访问”左子树中的节点,其次是右子树中节点,最后“访问”根节点。

3.2 图示

3.3 代码

 1     public void postOrder(Node<E> root){
 2         if(root != null) {
 3             //track to the deepest left branch
 4             postOrder(root.lnode);
 5             //track to the deepest right branch
 6             postOrder(root.rnode);
 7             //after visiting all the nodes of both left subtree and right subtree
 8             System.out.print(root.data);
 9             System.out.print('\t');
10         }
11     }

注意:层次遍历不能递归,可以结合递归条件想想为什么哦 :)

keep reading ,keep learning, keep coding…

猜你喜欢

转载自www.cnblogs.com/sheepcore/p/11580677.html