• 顺序存储二叉树


    顺序存储二叉树的概念

       基本说明:从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。

     顺序存储二叉树的特点:

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

      2)第n个元素的左子节点为2*n+1

      3)第n个元素的右子节点为 2*n+2

     4)第n个元素的父节点为(n-1)/2

     5)n:表示二叉树中的第几个元素(按0开始编号) 

    需求:给你一个数组{1 2 3 4 5 6 7},要求以二叉树前序遍历的方式进行遍历。前序遍历的结果应当为1 2 4 5 3 6 7

    代码实现:

    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.preOrder(); // 1,2,4,5,3,6,7
        }
    
    }
    
    //编写一个ArrayBinaryTree, 实现顺序存储二叉树遍历
    
    class ArrBinaryTree {
        private int[] arr;//存储数据结点的数组
    
        public ArrBinaryTree(int[] arr) {
            this.arr = arr;
        }
        
        //重载preOrder
        public void preOrder() {
            this.preOrder(0);
        }
        
        //编写一个方法,完成顺序存储二叉树的前序遍历
        /**
         * 
         * @param index 数组的下标 
         */
        public void preOrder(int index) {
            //如果数组为空,或者 arr.length = 0
            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);
            }
        }
        
    }
  • 相关阅读:
    c++虚函数表 Brew VTBL
    c++ 类数据成员的定义、声明
    变量声明和定义的区别
    C++ 对象间的赋值与拷贝构造函数
    Android应用程序构成
    android平台的技术架构
    认识Service
    Application的作用
    Context的作用
    如何切换到自定义的Activity
  • 原文地址:https://www.cnblogs.com/yangzhixue/p/12241781.html
Copyright © 2020-2023  润新知