创建一如下二叉树结构,并分别采用四种遍历:先根,中根,后根,层次遍历。并在 main 中编写测试用例,输出四种遍历结果。
先根:根-->左子树-->右子树
中根:左子树-->根-->右子树
后根:左子树-->右子树-->根
层次:从上向下依次排列即可
//定义一个二叉树
class Tree{
char data;
Tree left;
Tree right;
Tree(){
this.left=null;
this.right=null;
}
//先根遍历
public void foot (Tree p) {
if(p!=null) {
System.out.printf("%5c",p.data);
}
if(p.left!=null) foot(p.left);
if(p.right!=null) foot(p.right);
}
//中根遍历
public void middle(Tree p) {
if(p.left!=null) middle(p.left);
if(p!=null) {
System.out.printf("%5c",p.data);
}
if(p.right!=null) middle(p.right);
}
//后根遍历
public void last(Tree p) {
if(p.left!=null) last(p.left);
if(p.right!=null) last(p.right);
if(p!=null) {
System.out.printf("%5c",p.data);
}
}
//层次遍历
public void ceng(Tree q){
Queue<Tree> queue = new LinkedList<>();
Tree node;
if(q == null) {
return;
}
queue.add(q);
while (!queue.isEmpty()){
node = queue.peek();
queue.poll();
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
System.out.printf("%5c",node.data);
}
}
}
//完整代码
package Actrallytest;
import java.util.LinkedList;
import java.util.Queue;
//创建一如下二叉树结构,并分别采用四种遍历:先根,中根,后根,层次遍历。并在 main 中编写测试用例,输出四种遍历结果。
import java.util.Scanner;
//定义一个二叉树
class Tree{
char data;
Tree left;
Tree right;
Tree(){
this.left=null;
this.right=null;
}
//先根遍历
public void foot (Tree p) {
if(p!=null) {
System.out.printf("%5c",p.data);
}
if(p.left!=null) foot(p.left);
if(p.right!=null) foot(p.right);
}
//中根遍历
public void middle (Tree p) {
if(p.left!=null) middle(p.left);
if(p!=null) {
System.out.printf("%5c",p.data);
}
if(p.right!=null) middle(p.right);
}
//后根遍历
public void last (Tree p) {
if(p.left!=null) last(p.left);
if(p.right!=null) last(p.right);
if(p!=null) {
System.out.printf("%5c",p.data);
}
}
//层次遍历,使用队列输出
public void ceng(Tree q){
Queue<Tree> queue = new LinkedList<>();
Tree node;
if(q == null) {
return;
}
queue.add(q);
while (!queue.isEmpty()){
node = queue.peek();
queue.poll();
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
System.out.printf("%5c",node.data);
}
}
}
public class Fivetesting {
public static void main(String[] args) {
Tree arr[]= new Tree[7];
int i;
for(i=0;i<7;i++)
arr[i] = new Tree();//申请空间 类的对象必须申请空间才能使用
Scanner in = new Scanner(System.in);
for(i=0;i<7;i++) {
arr[i].data=in.next().charAt(0);//采用字符串输入,并且取第一个字符
arr[0].left=arr[1];
arr[0].right=arr[2];
arr[1].left=arr[3];
arr[2].left=arr[4];
arr[2].right=arr[5];
arr[3].right=arr[6];
}
System.out.println("请输入二叉树的各结点值:");
//输出
for(i=0;i<7;i++) {
System.out.print("该结点的值为:"+arr[i].data);
if(arr[i].left!=null)
System.out.printf("该节点的左孩子的值为:"+arr[i].left.data);
if(arr[i].right!=null)
System.out.printf("该节点的右孩子的值为:"+arr[i].right.data);
System.out.println();
}
System.out.println("先根遍历的结果为:");
arr[0].foot(arr[0]);
System.out.println();//换行
System.out.println("中根遍历的结果为:");
arr[0].middle(arr[0]);
System.out.println();
System.out.println("后根遍历的结果为:");
arr[0].last(arr[0]);
System.out.println();
System.out.println("层次遍历的结果为:");
arr[0].ceng(arr[0]);
}
}
//本人初次编写,如有错误,请各位多多指教!