二叉树的前序、中序、后序遍历(递归)

二叉树主要是进行递归遍历
前序:根节点进行访问=>对左子树进行递归遍历=>对右子树进行递归遍历
中序:对左子树进行递归遍历=>根节点进行访问=>对右子树进行递归遍历
后序:对左子树进行递归遍历=>对右子树进行递归遍历=>根节点进行访问
在这里插入图片描述
以前序遍历为例:
根节点为A,打印A;递归访问A.left,打印B;然后递归访问B.left,先打印D;递归访问D.left,D.left为null;递归访问D.right,D.right为null;递归访问B.right,先打印E,递归访问E.left,先打印G;递归访问G.left,为null;递归访问G.right,是H,先打印H,递归访问H.left为null;递归访问H.right,为null;递归访问E.right,为null;左子树遍历完毕。递归访问A.right,是C,先打印C;递归访问C.left是null;递归访问C.right是F;递归访问F.left,是null;递归访问F.right是null。这棵树遍历结束。

public class BinaryTree {
   static class Node{
       public char val;
       public  Node left;
       public Node right;

       public Node(char val) {
           this.val = val;
       }
   }
   //构建一棵树
    public static Node buildtree(){
      Node A=new Node('A');
      Node B=new Node('B');
      Node C=new Node('C');
      Node D=new Node('D');
      Node E=new Node('E');
      Node F=new Node('F');
      Node G=new Node('G');
      Node H=new Node('H');
      A.left=B;
      A.right=C;
      B.left=D;
      B.right=E;
      E.left=G;
      G.right=H;
      C.right=F;
      return A;
    }
    //前序遍历,递归
   public static void preOrder(Node root){
       if(root==null){
           return;
       }
       System.out.print(root.val+" ");
       preOrder(root.left);
       preOrder(root.right);
   }
   //中序遍历,递归
   public static void inOrder(Node root){
       if(root==null){
           return;
       }
       inOrder(root.left);
       System.out.print(root.val+" ");
       inOrder(root.right);
   }
   //后续遍历,递归
    public static void postOrder(Node root){
        if(root==null){
            return;
        }
        postOrder(root.left);
        postOrder(root.right);
        System.out.print(root.val+" ");
    }

    public static void main(String[] args) {
        Node node=buildtree();

        System.out.print("前序遍历:");
        preOrder(node);
        System.out.println();

        System.out.print("中序遍历:");
        inOrder(node);
        System.out.println();

        System.out.print("后序遍历:");
        postOrder(node);
        System.out.println();

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值