# 三分钟快速实现二叉树的递归遍历

## 思维导图：

5种形态：

A-B-C-D-E-F-G-H；

B-D-C-E-A-F-H-G;

D-E-C-B-H-G-F-A；

### 代码实现：

``` 1package com.java.model;
2
3public class BinaryTreeNode {
4    //树的根结点
5    public char ch;
6    //左结点
7    public BinaryTreeNode lchild;
8    //右结点
9    public BinaryTreeNode rchild;
10
11    //构造函数
12    public BinaryTreeNode(char ch, BinaryTreeNode lchild, BinaryTreeNode rchild) {
13        this.ch = ch;
14        this.lchild = lchild;
15        this.rchild = rchild;
16    }
17}```

``` 1package com.java.dao;
2
3import com.java.model.BinaryTreeNode;
4
5//二叉树递归遍历
6public class BTRecursionDao {
7    public void RecursionBiTree(BinaryTreeNode root){
8        if(root==null){
9            return;
10        }
11        //先序遍历
12        System.out.print(root.ch+" ");
13        RecursionBiTree(root.lchild);
14        RecursionBiTree(root.rchild);
15
16        /**
17         * 中序遍历(其实就是把顺序调换一下)
18         * RecursionBiTree(root.lchild);
19         * System.out.print(root.ch+" ");
20         * RecursionBiTree(root.rchild);
21         */
22
23        /**
24         * 后序遍历
25         * RecursionBiTree(root.lchild);
26         * RecursionBiTree(root.rchild);
27         * System.out.print(root.ch+" ");
28         */
29    }
30}```

``` 1package com.java.main;
2
3import com.java.dao.BTRecursionDao;
4import com.java.model.BinaryTreeNode;
5
6public class BTRecursionMain {
7    public static void main(String[] args) {
8        BTRecursionDao btRecursionDao=new BTRecursionDao();
9        //创建树结点
10        BinaryTreeNode node1=new BinaryTreeNode('A',null,null);
11        BinaryTreeNode node2=new BinaryTreeNode('B',null,null);
12        BinaryTreeNode node3=new BinaryTreeNode('C',null,null);
13        BinaryTreeNode node4=new BinaryTreeNode('D',null,null);
14        BinaryTreeNode node5=new BinaryTreeNode('E',null,null);
15        BinaryTreeNode node6=new BinaryTreeNode('F',null,null);
16        BinaryTreeNode node7=new BinaryTreeNode('G',null,null);
17        BinaryTreeNode node8=new BinaryTreeNode('H',null,null);
18
19        //建立结点间的关系
20        node1.lchild=node2;  /* node1就是A，结点A的左孩子是B(node2)，右孩子是F(node6) */
21        node1.rchild=node6;
22        node2.rchild=node3;  /* node2就是B，结点B的左孩子为null(初始化就是null，所以不用管)，右孩子是C(node3) */
23        node3.lchild=node4;
24        node3.rchild=node5;
25        node6.rchild=node7;
26        node7.lchild=node8;
27
28        //递归遍历
29        System.out.println("先序遍历结果:");
30        btRecursionDao.RecursionBiTree(node1);  /* 根结点为A */
31    }
32}```

0 条评论

• ### cms项目系列（二）——后台登录功能

在这之前，我们需要写一个通过用户名查找用户的方法；先在ManagerDao接口内：

• ### 数据结构——树、森林和二叉树的转换

森林是由若干棵树组成的，所以可以完全理解为，森林中的每一棵树都是兄弟，可以按照兄弟的处理办法来操作。步骤不如：

• ### 【python-leetcode876-快慢指针】链表的中间节点

输入：[1,2,3,4,5] 输出：此列表中的结点 3 (序列化形式：[3,4,5]) 返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])...

——老子

• ### win7远程桌面工具没有权限的解决方法

前几天我用iis7远程桌面管理工具发现用户的一台虚拟机（win2008r2）无法进行远程桌面访问，提示错误信息：

• ### vue3.0 高仿饿了么项目（项目初始化）

3.iPhone6 Plus分辨率414x736，像素1242x2208，@3x，（注意，在这个分辨率下渲染后，图像等比降低pixel分辨率至1080p(108...

• ### 手把手教你学Numpy【二】基本运算与切片

上一篇文章当中曾经提到过，同样大小的数据，使用Numpy的运算速度会是我们自己写循环来计算的上百倍甚至更多。并且Numpy的API非常简单，通常只要简单几行代码...

• ### 数据结构笔记（一）：数组、链表

数组（Array）是一种线性表数据结构。它用一组连续的内存空间，来存储一组具有相同类型的数据。