二叉树的三种遍历的三种方法(java实现)

创建二叉树的代码(左孩子的值要小于双亲节点,右孩子的值要大于双亲结点):

class Tree                     //节点类
{
 Tree left;                 //指向左孩子节点
 Tree right;                //指向右孩子节点
 int   data;                 
 public Tree() {}
 public Tree(int data) {
  this.left=null;
  this.right=null;
  this.data=data;
 }
  public  static void  insert(Tree root,int data)   //参数为树的根节点和要插入的节点
     {
      if(root!=null)
      {
       if(root.data>=data)
       {
        if(root.left==null)
        {
         root.left=new Tree(data);
        }
        else
        {
        insert(root.left,data);     //若子树根节点的左节点为空则继续向下递归
        }
       }
       else
       {
        if(root.right==null)
        {
         root.right=new Tree(data);
        }
        else
        {
        insert(root.right,data);        //与左节点的操作相同
        }
       }
      }
     }
}

1.前序遍历

  1. 规则是若二叉树为空,则退出操作
  2. 若二叉树不为空,则先访问根节点
  3. 再访问根节点的左孩子节点
  4. 再以左孩子为根节点的树重复2-3操作
  5. 直到递推找到左子树为空的子树根结点
  6. 再访问5中根节点的右孩子,并以该右孩子为根新子树的根节点,并重复3-6直到遍历完整个树
    代码如下
 public static  void PreOrderTraverse(Tree a)       //前序遍历算法
    {
     if(a==null)                          //当这是一个空树的时候直接退出函数
     {
      return;                                          
     }
     System.out.println(a.data);         //获得当前节点的数据值
     PreOrderTraverse(a.left);
     PreOrderTraverse(a.right);
     
    }
  

前序遍历图解:
在这里插入图片描述

2. 中序遍历

  1. 规则为若树为空,则空操作返回
  2. 否则从根结点开始(不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树
    代码如下:
 public static  void InOderTraverse(Tree a)       //中序遍历算法
    {
     if(a==null)                          //当这是一个空树的时候直接退出函数
     {
      return;                                          
     }
     InOderTraverse(a.left);
     System.out.println(a.data);         //获得当前节点的数据值
     InOderTraverse(a.right);
   }
     

中序遍历图解:
在这里插入图片描述

后序遍历

  1. 规则为若树为空,则空操作返回
  2. 否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点
    代码如下:
 public static  void PostOrderTraverse(Tree a)       //后序遍历算法
    {
     if(a==null)                          //当这是一个空树的时候直接退出函数
     {
      return;                                          
     }
     PostOrderTraverse(a.left);
     PostOrderTraverse(a.right);
     System.out.println(a.data);         //获得当前节点的数据值 
    }   

后序遍历的图解:
在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过递归和迭代两种方式实现二叉树三种遍历:前序遍历、中序遍历和后序遍历。 1. 前序遍历(Preorder Traversal):访问根节点,然后按照先左子树后右子树的顺序递归遍历左右子树。 递归实现: ```java public void preOrderTraversal(Node root) { if (root != null) { System.out.print(root.data + " "); // 访问根节点 preOrderTraversal(root.left); // 递归遍历左子树 preOrderTraversal(root.right); // 递归遍历右子树 } } ``` 2. 中序遍历(Inorder Traversal):先递归遍历左子树,然后访问根节点,最后递归遍历右子树。 递归实现: ```java public void inOrderTraversal(Node root) { if (root != null) { inOrderTraversal(root.left); // 递归遍历左子树 System.out.print(root.data + " "); // 访问根节点 inOrderTraversal(root.right); // 递归遍历右子树 } } ``` 3. 后序遍历(Postorder Traversal):先递归遍历左子树,然后递归遍历右子树,最后访问根节点。 递归实现: ```java public void postOrderTraversal(Node root) { if (root != null) { postOrderTraversal(root.left); // 递归遍历左子树 postOrderTraversal(root.right); // 递归遍历右子树 System.out.print(root.data + " "); // 访问根节点 } } ``` 以上是递归实现方式,也可以使用迭代的方式实现二叉树遍历,用栈来辅助实现。在遍历过程中,将节点放入栈中,然后按照一定顺序弹出节点进行操作,直到栈为空。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值