顺序存储结构的二叉树前、中、后序遍历

顺序存储二叉树的特点:

顺序二叉树通常只考虑完全二叉树

  • 第n个元素的左子节点为2*n+1
  • 第n个元素的右子节点为2*n+2
  • 第n个元素的父节点为(n-1)/2

n:表示二叉树中的第几个元素(如图所示)
在这里插入图片描述

代码实现

package com.edu.tree;

/**
 * @Date 2020/6/6 22:17
 * @Author by LiShiYan
 * @Description 顺序存储二叉树
 */
public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
        //创建一个 ArrBinaryTree
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        arrBinaryTree.postOrder();
    }
    static class ArrBinaryTree {
        /**
         * 存储数据节点的数组
         */
        private int[] arr;

        public ArrBinaryTree(int[] arr) {
            this.arr = arr;
        }

        /**
         * 重载前序遍历
         */
        public void preOrder(){
            this.preOrder(0);
        }
        /**
         * 重载中序遍历
         */
        public void infixOrder(){
            this.infixOrder(0);
        }
        /**
         * 重载后序遍历
         */
        public void postOrder(){
            this.postOrder(0);
        }
        /**
         * 顺序存储二叉树的前序遍历
         * @param index 数组下标
         */
        public void preOrder(int index){
            if (arr==null||arr.length==0){
                System.out.println("数组为空,不能按照二叉树的前序遍历");
            }
            //输出当前节点
            System.out.println(arr[index]);

            //向左递归遍历
            if ((index*2+1)<arr.length){
                preOrder(2*index+1);
            }
            //向右递归遍历
            if ((index*2+2)<arr.length){
                preOrder(2*index+2);
            }
        }

        /**
         * 顺序存储二叉树的中序遍历
         * @param index 数组下标
         */
        public void infixOrder(int index){
            if (arr==null||arr.length==0){
                System.out.println("数组为空,不能按照二叉树的前序遍历");
            }

            //向左递归遍历
            if ((index*2+1)<arr.length){
                infixOrder(2*index+1);
            }
            //输出当前节点
            System.out.println(arr[index]);
            //向右递归遍历
            if ((index*2+2)<arr.length){
                infixOrder(2*index+2);
            }
        }

        /**
         * 顺序存储二叉树的后序遍历
         * @param index 数组下标
         */
        public void postOrder(int index){
            if (arr==null||arr.length==0){
                System.out.println("数组为空,不能按照二叉树的前序遍历");
            }

            //向左递归遍历
            if ((index*2+1)<arr.length){
                postOrder(2*index+1);
            }

            //向右递归遍历
            if ((index*2+2)<arr.length){
                postOrder(2*index+2);
            }
            //输出当前节点
            System.out.println(arr[index]);
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值