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


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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务