根据层序创建树,前中后序遍历,删除


TreeNode* createTree(const int arr[], const int n, const int num_val = -1)
{
    if (n <= 0 || arr[0] == num_val) return nullptr;

    std::queue<TreeNode*> q;
    TreeNode* root = new TreeNode(arr[0]);
    q.push(root);

    int i = 1;
    while (!q.empty() && i < n)
    {
        TreeNode* cur = q.front();
        q.pop();

        if (i < n && arr[i] != num_val)
        {
            cur->left = new TreeNode(arr[i]);
            q.push(cur->left);
        }
        i++;
        if (i < n && arr[i] != num_val)
        {
            cur->right = new TreeNode(arr[i]);
            q.push(cur->right);
        }
        i++;
    }

    return root;
}

void preOrder(const TreeNode* tree)
{
    if (nullptr == tree) return;
    printf("%d ", tree->val);
    preOrder(tree->left);
    preOrder(tree->right);
}

void inOrder(const TreeNode* tree)
{
    if (nullptr == tree) return;
    inOrder(tree->left);
    printf("%d ", tree->val);
    inOrder(tree->right);
}

void postOrder(const TreeNode* tree)
{
    if (nullptr == tree) return;
    postOrder(tree->left);
    postOrder(tree->right);
    printf("%d ", tree->val);
}

void deleteTree(TreeNode*& tree)
{
    if (nullptr == tree) return;
    deleteTree(tree->left);
    deleteTree(tree->right);
    tree->left = nullptr;
    tree->right = nullptr;
    delete tree;
    tree = nullptr;
}

int main()
{
    int nums[] = { 10, 20, 30, 25, -1, 40, 50, -1, -1, -1, 60 };
    TreeNode* root = createTree(nums, sizeof(nums) / sizeof(int));
    preOrder(root);
    printf("\n");
    inOrder(root);
    printf("\n");
    postOrder(root);
    deleteTree(root);

    return 0;
}

全部评论

相关推荐

字节搜索二面挂当天被捞1、自我介绍2、你提到了用户的关注与取关,你用户关系服务是怎么设计的?(定义了关注表与粉丝表,两个表内容一致)3、你怎么保证两个表内容一致的?(目前是通过事务保证的,后面其实还可以通过订阅&nbsp;binlog&nbsp;伪从来保证一致性)3、如果是大&nbsp;V&nbsp;的情况,你有考虑到吗,做了哪些处理应对这种高并发(Redis&nbsp;缓存+二级缓存,冷热数据分离)4、分布式&nbsp;ID&nbsp;你都用来生成什么&nbsp;ID&nbsp;的?(笔记&nbsp;ID,用户&nbsp;ID,用户&nbsp;ID&nbsp;用的号段模式,笔记&nbsp;ID&nbsp;考虑到雪花算法自带的时间戳可以实现冷热数据分离,发布久远的笔记不缓存在&nbsp;redis,后由于点赞系统采用咆哮位图高效判断,但咆哮位图基本只能存储&nbsp;32&nbsp;位,遂也改为号段模式生成,生成效率基本没差多少)5、那你说说点赞系统怎么设计的?为什么改为咆哮位图了?(先是采用&nbsp;Set&nbsp;数据结构判断,后因为满足高并发需求,Set&nbsp;模式占用内存太多,又改用布隆过滤器实现,大大降低内存占用。但布隆过滤器在判断存在时存在误判,需要从数据库进行二次校验。后改用咆哮位图,既能高效判断点赞与否,内存占用也大大降低)6、那你讲一下咆哮位图的机制,为什么有你说的这些优点?7、MySQL&nbsp;了解吧,你讲一下&nbsp;MySQL&nbsp;的索引(一顿吟唱)8、说一下聚簇索引和非聚簇索引的区别9、联合索引再说一下,如何定义联合索引最好?(设计成覆盖索引)10、联合索引的顺序重要吗?(顺便再说一下索引下推)11、算法1:二叉树展开为链表12、算法2:根据层序遍历建树反问
字节跳动一面1227人在聊 查看13道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务