堆上开辟指针变量释放问题

在牛客上刷BM32 合并二叉树题时,比较纠结指针释放问题,给出的c++题解如下:

class Solution {
public:
    /**
     * 
     * @param t1 TreeNode类 
     * @param t2 TreeNode类 
     * @return TreeNode类
     */
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        // write code here
        if(!t1)
            return t2;
        if(!t2)
            return t1;
        TreeNode* head = new TreeNode(t1->val+t2->val);
        head->left = mergeTrees(t1->left, t2->left);
        head->right = mergeTrees(t1->right, t2->right);

        return head;
    }

上述题解可以通过测试,但考虑到这儿声明的head指针无法释放,因此想把TreeNode* head = new TreeNode(t1->val+t2->val);改成如下:

        TreeNode head_val(t1->val + t2->val);
        TreeNode* head = &head_val;

但这样会导致编译出错,牛客给出的出错是:

您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
您可以用printf或者cout在函数中打印信息分析问题

想请教各位,应该如何解决这个问题?

你在函数内定义,就变成栈内存,作用范围只在函数内,出了函数就释放了;一种可以定义全局变量,一种还是用new,但可以定义一个全局的head指针记录,最后释放;

我有点自己的见解 可以讨论讨论