算法与数据结构系列之[二叉树-下]

上篇贴出了二叉树的C语言代码实现,这篇贴出Java代码实现。

public class BinaryTree{

   private class Node{
       public int e;
       public Node left;
       public Node right;
       public Node(int e){
           this.e = e;
           this.left = null;
           this.right = null;
       }
       public Node(){
           this(0);
       }
   }

   private Node root; //二叉树的根节点

   public BinaryTree(){
       root = new Node();
   }

   /**
    * 初始化二叉树,创建根节点
    * 这里为了方便起见,假设输入的节点只能是大于0的数,小于等于0都视作空树
    *
    * @return
    */
   public Node initBinaryTree(){
       int  val;
       System.out.println("请输入根节点:");
       Scanner scanner = new Scanner(System.in);
       val =  scanner.nextInt();
       if(val <= 0){
           System.out.println("该树为空树");
           System.exit(0);
       }

       root.e = val;
       root.left = null;
       root.right = null;


       return root;
   }
   /**
    * 创建二叉树
    * 这里为了方便起见,假设输入的节点只能是大于0的数,小于等于0都视作无效
    * 如果一个节点的左子节点输入的值为小于0的数,则该节点没有左子节点,返回
    * 如果一个节点的右子节点输入的值为小于0的数,则该节点没有右子节点,返回
    * @param n
    */
   public void createTree(Node n){
       int val;
       System.out.println(MessageFormat.format("请输入{0}的左子节点",n.e));
       Scanner scanner = new Scanner(System.in);
       val =  scanner.nextInt();
       if(val <= 0)
           return;
       if(val >0){
           Node node = new Node(val);
           n.left = node;
           createTree(n.left);
       }

       System.out.println(MessageFormat.format("请输入{0}的右子节点",n.e));
       Scanner sn = new Scanner(System.in);
       val =sn.nextInt();
       if(val >0){
           Node node = new Node(val);
           n.right = node;
           createTree(n.right);
       }
   }

   public void createTree(){
       createTree(initBinaryTree());
   }
   /**
    * 二叉树的前序遍历
    * @param node
    */
   private void preOrder(Node node){
       if(node == null)
           return;
       System.out.print(node.e);
       preOrder(node.left);
       preOrder(node.right);
   }


   public void preOrder(){
       preOrder(root);
   }

   /**
    * 二叉树的中序遍历
    * @param node
    */
   private void inOrder(Node node){
       if(node == null)
           return;
       inOrder(node.left);
       System.out.print(node.e);
       inOrder(node.right);
   }

   public void inOrder(){
       inOrder(root);
   }

   /**
    * 二叉树的后序遍历
    * @param node
    */
   private void postOrder(Node node){
       if(node == null)
           return;
       postOrder(node.left);
       postOrder(node.right);
       System.out.print(node.e);
   }

   public void postOrder(){
       postOrder(root);
   }
   
   public static void main(String[] args) {
       BinaryTree binaryTree = new BinaryTree();
       binaryTree.createTree();
       binaryTree.preOrder();
       System.out.println();
       binaryTree.inOrder();
       System.out.println();
       binaryTree.postOrder();
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值