二叉树的前、中、后序及层次排列
public static void main(String[] args) {
Tree treeG = new Tree('G', null, null);
Tree treeD = new Tree('D', null, null);
Tree treeF = new Tree('F', null, null);
Tree treeE = new Tree('E', treeF, null);
Tree treeB = new Tree('B', treeD, treeE);
Tree treeC = new Tree('C', treeG, null);
Tree treeA = new Tree('A', treeB, treeC);
//前序排列
System.out.print("前序排列:");
VLR(treeA);
System.out.println();
//中序排列
System.out.print("中序排列:");
LDR(treeA);
System.out.println();
//后序排列
System.out.print("后序排列:");
LRD(treeA);
System.out.println();
System.out.print("层次排列:");
Queue<Tree> queue = new LinkedList<>();
queue.offer(treeA);
level(queue);
}
/**
* 输出节点
*
* @param tree
*/
public static void print(Tree tree) {
System.out.print(tree.getData());
}
/**
* 前序排列-VLR
*
* @param tree
*/
public static void VLR(Tree tree) {
print(tree);
if (tree.left != null) {
VLR(tree.left);
}
if (tree.right != null) {
VLR(tree.right);
}
}
/**
* 中序排序-LDR
*
* @param tree
*/
public static void LDR(Tree tree) {
if (tree.left != null) {
LDR(tree.left);
}
print(tree);
if (tree.right != null) {
LDR(tree.right);
}
}
/**
* 后序排列-LRD
*
* @param tree
*/
public static void LRD(Tree tree) {
if (tree.left != null) {
LRD(tree.left);
}
if (tree.right != null) {
LRD(tree.right);
}
print(tree);
}
/**
* 层次排序
*
* @param queue
*/
public static void level(Queue<Tree> queue) {
if (queue.size() == 0) {
return;
}
Tree tree = queue.poll();
print(tree);
if (tree.left != null) {
queue.offer(tree.left);
}
if (tree.right != null) {
queue.offer(tree.right);
}
level(queue);
}
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public static class Tree {
private char data;
private Tree left;
private Tree right;
}
缘于生活,而归于工作。本人所书,而意于分享。
如有转载,请注明出处!
--活出自己范儿

浙公网安备 33010602011771号