二叉树的打印程序需要用到队列来完成,在Java中使用LinkedList类即可。具体的代码如下所示:
public class TreeNode {
private int value;
private TreeNode ltr;
private TreeNode rtr;
public TreeNode addNode(int value) {//给一个树加一个节点,this表示树根
TreeNode root =this;
if (this.getValue() > value) {
if(this.getLtr()!=null) {
this.setLtr(this.getLtr().addNode(value));
}
else {
TreeNode tnew = new TreeNode(value);
tnew.setLtr(null);
tnew.setRtr(null);
this.setLtr(tnew);
}
} else {
if(this.getRtr()!=null) {
this.setRtr(this.getRtr().addNode(value));
}
else {
TreeNode tnew = new TreeNode(value);
tnew.setLtr(null);
tnew.setRtr(null);
this.setRtr(tnew);
}
}
return root;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public TreeNode getLtr() {
return ltr;
}
public void setLtr(TreeNode ltr) {
this.ltr = ltr;
}
public TreeNode getRtr() {
return rtr;
}
public void setRtr(TreeNode rtr) {
this.rtr = rtr;
}
public TreeNode() {
}
public TreeNode(int value) {
this.value = value;
}
}
在TreeNode类中除了成员之外还有一个添加节点的函数,用递归即可完成数的创建。
测试类如下,打印每一层的树节点后,会换行后打印下一深度的节点。
import java.util.LinkedList;
import java.util.Scanner;
public class TreePrinter {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String[] set = s.split(" ");
TreeNode t = new TreeNode(Integer.parseInt(set[0]));
for (int i = 1; i < set.length; i++) {
t.addNode(Integer.parseInt(set[i]));
}
sc.close();
System.out.println("树已经创建完毕,按深度打印的结果为:");
LinkedList<TreeNode> lini = new LinkedList<TreeNode>();
lini.add(t);
while(lini.size()!=0) {
lini=printTreeInDepth(lini);
}
}
private static LinkedList<TreeNode> printTreeInDepth(LinkedList<TreeNode> l) {
// l是当前的队列,每次要把它打完,然后对于其中的元素,加入左右儿子进入一个新的队列,返回这个队列
LinkedList<TreeNode> res = new LinkedList<TreeNode>();// 要返回这个队列
for (TreeNode tn : l) {
System.out.print(tn.getValue() + " ");
if (tn.getLtr() != null) {
res.add(tn.getLtr());
}
if (tn.getRtr() != null) {
res.add(tn.getRtr());
}
}
System.out.println();
return res;
}
}