(一)java实现二叉树并实现遍历

(一)java实现简单二叉树:

树的相关知识可参考:二叉树抽象数据类型

二叉树是每个节点最多有两个子树的有序树

  • 二叉树的基本组成是结点,因此要先定义节点类:
    • 节点类:左子树,右子树,数据
    • 树类:根结点;实现方法…
//结点类
class Node{
     Node left;   //左子树
     Node right;   //右子树
     int data;    //存储的数据
    
      //构造函数
      public Node(data){
        this.data=data;
     }
}
//树类
class Tree{
       //定义根结点
    public Node root;
    
      //构造函数
    public Tree(){
    }
 
    //添加子树
    public void create(int data){
         Node newnode=new Node(data);
       if(root==null){
          root=newnode;
          return;
       }else{
            while(true){
         if(data<root.data){
            root=root.left;
              if(root!=null){
                 root=newnode;
                 break;
                 }
               }
          if(data>root.data){
            root=root.right;
             if(root!=null){
               root=newnode;
               break;
               }
            }
            
      } 
      
    }    
}

(二)二叉树的遍历:

1.递归遍历

只需要调整输出位置即可;

//前序遍历
public void preorder(Node node){
     System.out.println(node.data+" ");
     preorder(node.left);
     preorder(node.right);  
}


//中序遍历
   public void inorder(Node node){
     inorder(node.left);
       System.out.println(node.data+" ");
     inorder(node.right);  
 }


//后序遍历
     public void aforder(Node node){
     aforder(node.left);    
     afder(node.right);  
       System.out.println(node.data+" ");
 }

2.非递归遍历

非递归遍历需要借助,以中序遍历为例;
在这里插入图片描述

将左边的子树全部取出压入栈中


//前序遍历

public void preorder(Node node){
       Stack<Node> s = new Stack<Node>();
       
       Node p=root;
      while(p!=null||s.size()!=0){       
               while(p!=null){
                System.out.println(p.data+" ");  
                   s.push(p);
                   p=p.left;
               }
                 
               p=s.pop();
               p=p.right;
      }  

}

//中序遍历

public void inorder(Node node){
       Stack<Node> s = new Stack<Node>();
       
       Node p=root;
      while(p!=null||s.size()!=0){       
               while(p!=null){
                   s.push(p);
                   p=p.left;
               }
               p=s.pop();
             System.out.println(p.data+" ");  
               p=p.right;
      }  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值