import java.util.Iterator;
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
class Node{
private Node left;
private Node right;
private int data;
public Node(int data){
this.data = data;
}
public void setLChild(Node left){
this.left = left;
}
public void setRChild(Node right){
this.right = right;
}
public void setData(int data){
this.data = data;
}
public int getData(){
return this.data;
}
public Node getLChild(){
return this.left;
}
public Node getRChild(){
return this.right;
}
}
class tree {
public Node head;
public static int index;
//先序遍历
public Node greattree() {
Node tree;
Scanner num = new Scanner(System.in);
int nums = num.nextInt();
if (nums == 0) {
return null;
} else {
tree = new Node(nums);
System.out.println("请输入" + tree + "的左节点\n");
tree.setLChild(greattree());
System.out.println("请输入" + tree + "的右节点:\n");
tree.setRChild(greattree());
}
return tree;
}
//前序遍历
public void frontEach(Node tree) {
System.out.print(tree.getData()+"\t");
if (tree.getLChild() != null) {
frontEach(tree.getLChild());
}
if (tree.getRChild() != null) {
frontEach(tree.getRChild());
}
}
//中序遍历
public void midEach(Node tree){
if (tree == null) {
return;
}
if (tree.getLChild() != null) {
midEach(tree.getLChild());
}
System.out.println(tree.getData()+"\t");
if (tree.getRChild() != null) {
midEach(tree.getRChild());
}
}
//后序遍历
public void lastEach(Node tree) {
if (tree.getLChild() != null) {
lastEach(tree.getLChild());
}
if (tree.getRChild() != null) {
lastEach(tree.getRChild());
}
System.out.println(tree.getData()+"\t");
}
//求树的高度
public int getHeight(Node tree) {
//递归获取
int leftHeight = 0;
int rightHeight = 0;
if (tree == null) {
return 0;
} else {
leftHeight = getHeight(tree.getLChild());
rightHeight = getHeight(tree.getRChild());
}
return leftHeight >= rightHeight ? ++leftHeight : ++rightHeight;
} //层次遍历,用到队列
public void BTreeLevelOrder(Node tree){
if(tree==null)
{
return ;
}
Queue <Node> queue = new LinkedList<Node>();
LinkedList<Node> list = new LinkedList<Node>();
queue.offer(tree);
while(!queue.isEmpty()){
Node pre = queue.poll();
list.add(pre);
if(pre.getLChild()!=null)
queue.offer(pre.getLChild());
if(pre.getRChild()!=null)
queue.offer(pre.getRChild());
}
Iterator<Node> it = list.iterator();
while(((Iterator<?>) it).hasNext()){
Node cur = (Node)it.next();
System.out.print(cur.getData()+", ");
}
}
}
public class 二叉树 {
public static void main(String[] args) {
tree tree = new tree();
int num=1;
while (num!=0) {
System.out.println("*********************\n");
System.out.println("*** 1.创建二叉树 ***\n");
System.out.println("*** 2.前序遍历 ***\n");
System.out.println("*** 3.中序遍历 ***\n");
System.out.println("*** 4.后序遍历 ***\n");
System.out.println("*** 5.求树的高度 ***\n");
System.out.println("*** 6.层序遍历 ***\n");
System.out.println("*********************\n");
int key;
Scanner nums = new Scanner(System.in);
key = nums.nextInt();
switch (key) {
case 1 -> {
System.out.println("请输入树的根节点(以0为结束节点)");
tree.head = tree.greattree();
System.out.println("创建成功\n");
}
case 2 -> {
System.out.print("\n先序遍历:\n");
tree.frontEach(tree.head);
System.out.println();
}
case 3 -> {
System.out.print("\n中序遍历:\n");
tree.midEach(tree.head);
}
case 4 -> {
System.out.print("\n后序遍历:\n");
tree.lastEach(tree.head);
System.out.println();
}
case 5 -> {
System.out.println("\n求树的高度:\n" +tree.getHeight(tree.head));
System.out.println();
}
case 6->{
System.out.println("\n层序遍历:\n");
tree.BTreeLevelOrder(tree.head);
System.out.println();
break;
}
}
}
}
}
数据结构(实验报告)——二叉树的建立和遍历()
最新推荐文章于 2023-12-10 18:12:43 发布