使用java实现一棵二叉树,并使用他完成二叉树的层次遍历,两种中序遍历 递归 &非递归


一、定义节点结构

package binaryTree;

public class Node {
    public int data;

    public Node leftNode;

    public Node rightNode;

    public Node(int key) {
        data = key;
    }
    @Override
    public String toString() {
        return "Node{" +
                "data=" + data +
                ", leftNode=" + leftNode +
                ", rightNode=" + rightNode +
                '}';
    }
}

二、中序遍历

中序遍历的思路是:(左根右)

遇到一个节点,先缓存,看其是否有左子节点,若有,则输出左节点,再输出原节点,最后输出右节点。
在这里插入图片描述
该二叉树的中序遍历顺序为:
D -> B -> E ->A -> F -> C -> G

递归

 //中序遍历,递归
    public void midOrder(Node root){
        if(root==null){
            return;
        }
        midOrder(root.leftNode);//左子
        System.out.println(root.data);
        midOrder(root.rightNode);//右子
    }

非递归

//中序遍历,非递归
    public void midOrderSimpl(Node root){
        Stack<Node>stack=new Stack<>();
        Node cur= root;
        while(!stack.empty()||cur!=null){
            while (cur!=null){
                stack.push(cur);
                cur=cur.leftNode;
            }
            cur=stack.pop();
            System.out.println(cur.data);
            cur=cur.rightNode;
        }
    }

三、层次遍历

按照二叉树的层次从上至下从左至右进行遍历
在这里插入图片描述
该二叉树的层次遍历顺序为:
A -> B -> C -> D -> E -> F ->G
实现思路:

  1. 根结点入队;

  2. 根结点出队,若其存在左子结点,左子结点入队;若其存在右子结点,右子结点出队;

  3. 重复1,2直至队列为空。

public void levelOrder(Node root){
        Queue<Node>queue=new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()){
            Node cur=queue.poll();
            System.out.println(cur.data);
            if(cur.leftNode!=null){
                queue.add(cur.leftNode);
            }if(cur.rightNode!=null){
                queue.add(cur.rightNode);
            }
        }
    }

四、测试

package binaryTree;

public class Test828 {
    public static void main(String[] args) {
        Node node=new Node(1);
        Node node1=new Node(2);
        Node node2=new Node(3);
        Node node3=new Node(4);
        Node node4=new Node(5);
        node.leftNode=node1;
        node.rightNode=node2;
        node1.leftNode=node3;
        node1.rightNode=node4;
        BinaryTree binaryTree=new BinaryTree();
        binaryTree.midOrderSimpl(node);
        System.out.println("-----------");
        binaryTree.levelOrder(node);

    }
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值