首先需要去理解二叉树的定义 : ------
/**
* 二叉树
* 每个结点最多有两个子结点
*
* Created by on 2017/11/2.
*/
public class BinaryTree implements Serializable {
private static final long serialVersionUID = -1966626461756678149L;
private String t;
private BinaryTree lchild;
private BinaryTree rchild;
public BinaryTree() {
}
public BinaryTree(String t) {
this.t = t;
}
public BinaryTree(String t, BinaryTree lchild, BinaryTree rchild) {
this.t = t;
this.lchild = lchild;
this.rchild = rchild;
}
public String getT() {
return t;
}
public void setT(String t) {
this.t = t;
}
public BinaryTree getLchild() {
return lchild;
}
public void setLchild(BinaryTree lchild) {
this.lchild = lchild;
}
public BinaryTree getRchild() {
return rchild;
}
public void setRchild(BinaryTree rchild) {
this.rchild = rchild;
}
/**构建指针*/
public void setChild(BinaryTree lchild,BinaryTree rchild){
this.lchild = lchild;
this.rchild = rchild;
}
}
先创建树的vo
/** * 二叉树 * Created by on 2017/11/2. */ public class BinaryTreeUtils { /**前序遍历算法 * 1,结点 * 2,左分支 * 3,右分支 * */ public static void preOrderTraverse(BinaryTree T) { if (T == null) return; System.out.println(T.getT()); preOrderTraverse(T.getLchild()); preOrderTraverse(T.getRchild()); } /**中序遍历算法 * 1,左分支先遍历 * 2,结点 * 3,右分支 * */ public static void inOrderTraverse(BinaryTree T) { if (T == null) return; inOrderTraverse(T.getLchild()); System.out.println(T.getT()); inOrderTraverse(T.getRchild()); } /**中序遍历算法 * 1,左分支先遍历 * 2,右分支 * 3,结点 * */ public static void postOrderTraverse(BinaryTree T) { if (T == null) return; postOrderTraverse(T.getLchild()); postOrderTraverse(T.getRchild()); System.out.println(T.getT()); } }
树的遍历
/** * Created by on 2017/11/2. */ public class BinaryTreeTest { /**构建树*/ public static BinaryTree createTree(){ BinaryTree A = new BinaryTree("A"); BinaryTree B = new BinaryTree("B"); BinaryTree C = new BinaryTree("C"); BinaryTree D = new BinaryTree("D"); BinaryTree E = new BinaryTree("E"); BinaryTree F = new BinaryTree("F"); BinaryTree G = new BinaryTree("G"); BinaryTree H = new BinaryTree("H"); BinaryTree I = new BinaryTree("I"); BinaryTree J = new BinaryTree("J"); BinaryTree K = new BinaryTree("K"); A.setChild(B,C); B.setChild(D,E); D.setLchild(H); H.setRchild(K); C.setChild(F,G); F.setLchild(I); G.setRchild(J); return A; } @Test public void test1(){ BinaryTreeUtils.preOrderTraverse(createTree()); } @Test public void test2() { BinaryTreeUtils.inOrderTraverse(createTree()); } @Test public void test3() { BinaryTreeUtils.postOrderTraverse(createTree()); } }
树的测试