【发布时间】:2020-01-08 20:17:56
【问题描述】:
这是一个 Leetcode 的问题,Flatten Binary Tree to Linked List。
我的解决方案非常简单。对于节点root,将root->right 推入堆栈。将root->left 设置为root->right 并将root->left 设置为NULL。
我得到一个运行时错误:
AddressSanitizer: heap-use-after-free on address 0x603000000108 at pc 0x00000046bf70 bp 0x7ffc5d6c5f70 sp 0x7ffc5d6c5f68
是什么导致了错误?
这是我的代码:
class Solution {
public:
void flat_tree(TreeNode* pre, TreeNode* root, stack<TreeNode*>& s){
if(root == NULL){
if(s.empty()) return;
else{
TreeNode* newroot = s.top();
s.pop();
pre->right = newroot;
flat_tree(pre, newroot,s);
}
}else{
if(root->left == NULL) {
flat_tree(root, root->right, s);
}else if(root->right == NULL){
root->right = root->left;
flat_tree(root, root->right, s);
}else{
TreeNode* right = root->right;
root->right = root->left;
s.push(right);
flat_tree(root, root->right, s);
}
}
}
void flatten(TreeNode* root) {
stack<TreeNode*> s;
flat_tree(NULL ,root,s);
}
};
【问题讨论】:
标签: c++ recursion stack binary-tree