数据结构(实验报告)——二叉树的建立和遍历()

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;

                     }
                 }
                 }

             }
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值