目录
1.基础搭建
创建成员变量和成员方法
使用最low的方式搭建出来了简易二叉树
1.1基础代码
public class TestBinaryTree {
public class TreeNode {
public char val;
public TreeNode left;//左孩子
public TreeNode right;//右孩子
public TreeNode(char val) {
this.val = val;
}
}
public TreeNode createTree() {
TreeNode A = new TreeNode('A');
TreeNode B = new TreeNode('B');
TreeNode C = new TreeNode('C');
TreeNode D = new TreeNode('D');
TreeNode E = new TreeNode('E');
TreeNode F = new TreeNode('F');
TreeNode G = new TreeNode('G');
TreeNode H = new TreeNode('H');
A.left = B;
A.right = C;
B.left = D;
B.right = E;
C.left = F;
C.right = G;
E.right = H;
return A;
}
1.2 遍历代码
二叉树一般使用递归来实现
//前序遍历
public void preOrder(TreeNode root) {
if (root == null) return;
System.out.println(root.val + " ");
preOrder(root.left);
preOrder(root.right);
}
//中序遍历
public void inOrder(TreeNode root) {
if (root == null) return;
inOrder(root.left);
System.out.println(root.val + " ");
inOrder(root.right);
}
//后序遍历
public void postOrder(TreeNode root) {
if (root == null) return;
postOrder(root.left);
postOrder(root.right);
System.out.println(root.val + " ");
}
下面开始详细解释递归代码,在此之前,再了解一下什么是前序遍历,中序遍历和后序遍历。
前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点--->根的左子树--->根的右子树。
中序遍历(Inorder Traversal)——根的左子树--->根节点--->根的右子树。
后序遍历(Postorder Traversal)——根的左子树--->根的右子树--->根节点。
1.2.1递归代码解释
以前序遍历为模板进行画图解释。
前序遍历代码的逻辑是:先判断root是否为空,为空直接返回,不为空,就去判断他的左子树是否为空,不为空就接着往下走,一直到为空就返回,然后再去判断右子树,右子树也按照这个逻辑往下走。
D的左右子树全部走完,返回B,开始走B的右子树
走到这里,A的左子树B,D,E,H已经全部走完,返回到A,准备开始走A的右子树
此时A的右子树C,F,G已经全部走完,此时A已经完成前序遍历,顺序是ABDEHCFG
A的中序遍历和后序遍历也是同理,就不重复说了,可以自己试着画画
中序遍历顺序:DBEHACFG
后序遍历顺序:DHEBFGCA
这段的代码是测试代码
public class Test {
public static void main(String[] args) {
TestBinaryTree testBinaryTree = new TestBinaryTree();
TestBinaryTree.TreeNode root = testBinaryTree.createTree();
testBinaryTree.preOrder(root);//前
System.out.println("========================");
testBinaryTree.inOrder(root);//中
System.out.println("========================");
testBinaryTree.postOrder(root);//后
}
}
看一下代码运行的结果
这就是二叉树的前序遍历递归代码的画图解释,完