面试前必刷 在面试手动构建二叉树 数组结构转树结构 二叉树

目录

序言

数组结构

代码 


序言

平时leetcode上面二叉树结构常常用的是TreeNode的形式

在面试中常常需要自己构建二叉树,此时建议实现二叉树的数组构建形式

因此我想到通过 数组转树 来理解更好的理解二叉树的数组构建形式。

数组结构

二叉树数组结构就是完全二叉树,只不过其中的坐标为left=2*pos+1,right=left+1;

因此操作左右孩子时可以通过坐标来操作。

代码 

public class Main {
    class TreeNode {
        int val;
        TreeNode left, right;

        public TreeNode() {
        }

        public TreeNode(int val) {
            this.val = val;
        }

        public TreeNode(TreeNode left, TreeNode right) {
            this.left = left;
            this.right = right;
        }
    }

    public static void main(String[] args) {
        new Main().solution();
    }

    private void solution() {
        //二叉树数组按照完全二叉树实现
        //-1表示null
        int[] treeArray = new int[]{0, 1, 2, -1, 4, -1, 6};
        TreeNode tree = new TreeNode(treeArray[0]);
        ArrayToTreeNode(tree, 0, treeArray, treeArray.length);
        /* 树结构如下
                  0
         *     1    2
         * null 4 null 6
         */
        //0 1 4 2 6
        preorder(tree);
    }

    private void preorder(TreeNode node) {
        if (node == null) return;
        System.out.println(node.val);
        preorder(node.left);
        preorder(node.right);
    }

    private void ArrayToTreeNode(TreeNode node, int index, int[] treeArray, int n) {
        if (index >= n || node == null) return;
        int left = 2 * index + 1, right = left + 1;
        if (left < n)
            node.left = treeArray[left] == -1 ? null : new TreeNode(treeArray[left]);
        if (right < n)
            node.right = treeArray[right] == -1 ? null : new TreeNode(treeArray[right]);
        ArrayToTreeNode(node.left, left, treeArray, n);
        ArrayToTreeNode(node.right, right, treeArray, n);
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值