將數組轉化為二叉樹


一、數組和二叉樹的關系

二叉樹可以通過數組來進行存儲。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);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM