leetcode数组结构转为二叉树树结构

请问 [1, null, 2, 3] 在二叉树测试用例中代表什么

leetcode关于二叉树编程中,测试用例中的数组是如何转换成二叉树的,实际上是通过层次遍历来把数组转换成二叉树。

在 C++中的 vector 数据结构里,只能有一种类型,这里我们用INT_MAX来代替 null,需要转换的数组中的 null 也请用 INT_MAX 来代替。

我们的转换程序主要是应用在本地,为了方便本地的调试,因此在使用时,尤其要注意数据的范围,若真的用到了 INT_MAX 对应的数据,请把转换程序中代替 null 的INT_MAX更换为其他数字。

二叉树结构为:

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;

    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

代码实现如下:

/**
 * 将leetcode中的数组转为二叉树
 * 因C++中的vector只能是同一个类型,这里用INT_MAX来代替null
 * @param {vector<int>} nums
 * @return {TreeNode}
 */
TreeNode *vectorToTree(vector<int> nums) {
    int i = 1;
    bool isLeftTree = true; // 是否是左分支,true为左分支,false时是右分支

    if (nums.size() == 0) {
        return nullptr;
    }
    queue<TreeNode *> myQueue;
    TreeNode *head = new TreeNode(nums[0]);
    myQueue.push(head);

    while (i < nums.size()) {
        TreeNode *topNode = myQueue.front();

        // 这里我们与js版稍微有点区别
        // 队列中的节点只要用两次,当isLeftTree指向到右分支时,说明可以取出了
        if (!isLeftTree) {
            myQueue.pop();
        }

        // 我们用INT_MAX来标识nullptr
        if (nums[i] != INT_MAX) {
            TreeNode *node = new TreeNode(nums[i]);

            if (isLeftTree) {
                topNode->left = node;
            } else {
                topNode->right = node;
            }
            myQueue.push(node);
        }
        isLeftTree = !isLeftTree;
        i++;
    }
    return head;
}

输入:

vector<int> nums = [1,2,3,4,null,5,6,null,null,7];

二叉树:

参考:

https://support.leetcode.cn/hc/kb/article/1549360

将leetcode中二叉树的数组结构转为真实的树结构-蚊子-前端博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值