二叉树可以通过数组来进行存储。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);
    }

相关文章:

  • 2022-01-11
  • 2021-05-15
  • 2021-04-15
  • 2022-01-02
猜你喜欢
  • 2021-07-21
  • 2021-07-14
  • 2021-09-13
  • 2021-10-07
  • 2022-12-23
  • 2021-08-04
  • 2022-12-23
相关资源
相似解决方案