zoukankan      html  css  js  c++  java
  • 将数组转化为二叉树

    一、数组和二叉树的关系

    二叉树可以通过数组来进行存储。https://www.cnblogs.com/Brake/p/15058906.html

    数组从0开始,如果父节点在数组中的下标是i,那么其左二子在数组中对应的下标则为2i+1。右儿子子对应的下标为2i+2。

    同理,已知某节点在数组中对应的下标为i,那么其父亲节点对应的下标为i/2;

    二、将数组转换为二叉树

    基于上述二叉树和数组的关系,转换代码如下。

    先建立TreeNode数据结构

    
        private Integer value;
        private TreeNode left;
        private TreeNode right;
    
        public Integer getValue() {
            return value;
        }
    
        public void setValue(Integer value) {
            this.value = value;
        }
    
        public TreeNode getLeft() {
            return left;
        }
    
        public void setLeft(TreeNode left) {
            this.left = left;
        }
    
        public TreeNode getRight() {
            return right;
        }
    
        public void setRight(TreeNode right) {
            this.right = right;
        }
    }
    

    使用递归进行转换:

        public static TreeNode createTree(int rootIndex, List<Integer> values) {
            if (rootIndex >= values.size()) {
                return null;
            }
            TreeNode rootNode = new TreeNode();
            rootNode.setValue(values.get(rootIndex));
            rootNode.setLeft(createTree(2 * rootIndex + 1, values));
            rootNode.setRight(createTree(2 * rootIndex + 2, values));
            return rootNode;
        }
    

    通过数组转换的二叉树是一颗完全二叉树。

    测试代码:

        private TreeNode createTree() {
            List<Integer> values = new ArrayList<>();
            for (int i = 1; i <= 6; i++)
                values.add(i);
    
            return TreeUtil.createTree(0, values);
        }
    
    作者:iBrake
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    DynamicObject
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    ABP文档
    第1张 Maven简介 学习笔记
    lambda表达式10个示例——学习笔记
    对象在内存中初始化的过程?
  • 原文地址:https://www.cnblogs.com/Brake/p/15256989.html
Copyright © 2011-2022 走看看