如何解决AddressSanitizer:DEADLYSIGNAL 尝试展平二叉树时出错
我正在尝试压平二叉树。为此,我使用以下算法:
- 将 root 的右孩子存储在临时变量中。
- 使左孩子成为右孩子并将根更改为根->右。
- 为所有子节点的新节点递归调用 flatten()。
- 左递归返回后,遍历得到最后一个根节点,使临时节点为根->右。
- 重复 1。
错误如下:
==31==ERROR: AddressSanitizer: heap-use-after-free on address 0x6030000000a8 at pc 0x000000371595 bp 0x7ffcc8d7f6b0 sp 0x7ffcc8d7f6a8
READ of size 8 at 0x6030000000a8 thread T0
==31==ABORTING
//Some part of error log is deleted.
class Solution {
public:
void flatten(TreeNode* root) {
if(root == NULL) return;`enter code here`
if(root->left == NULL && root->right == NULL) return;
TreeNode* right = root->right;
TreeNode* left = root->left;
if(left != NULL) {
root->right = left;
cout<<left->val<<endl;
cout<<root->right->val<<endl;
cout<<root->val<<endl;
root = root->right;
}
// root->left = NULL;
// flatten(root);
// while(root->right) root = root->right;
// if(right) {
// root->right = right;
// root = root->right;
// }
// flatten(root);
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。