在牛客上刷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指针记录,最后释放;
我有点自己的见解 可以讨论讨论