我的理解是第一种只是声明了一个指针p,该指针用来存储类A的地址,但并没有指向哪一个具体类,因为没有给他开辟可用的类A的空间。第二种是声明指针q的同时还在堆中开辟了一个新的可用的类A空间,并将该空间的起始地址赋值给q,相当于第一种形式的A *p;p=new A();这是我个人的理解,小白还望大佬指点?
希望大神能解释下
看花了 不好意思,代码中有delete
这是一个递归的调用,删除顺序是左右本身 如 可以将一个深度两层以上的数视为
根
左树 右树
删左树时一样直到一个树只有2层 删除本身后,他又是另外一个更大的树的左树,然后删那个更大的树的右树
以此类推,递归
他留了个错误,看完最后一节,老师会修改成递归
我的理解是,如果pNode==NULL,就相当于pNode这个结点不存在,就更不存在
pNode -> data = temp -> data
这一步了。
pNode就是把要删除的那个结点的内容保存下来的结点
this = NULL与this->pParent->pLChild != NULL发生冲突,相当于this->pParent->pLChild指向了空指针,发生异常
看错了,已经释放。。
int的二叉数组,你可以把它看为一个你自己指定一个规则向数组里面放int数字。数组的index不能<0,不能大于maxSize。
因为存在节点递归删除,空节点的pLchild、pRchild都是不存在的,若不判空就会报错
根结点的父亲就是空,防止对空指针进行操作
这样说吧 删除自己后父节点指向NULL 此时以及无法通过父节点找到你的子节点 ,但是子节点所申请的内存并没有被释放,造成内存泄漏
PS:申请到的内存一定要小心,不要忘记回收了
delete的操作,实际上可以看做是对树的对象中的元素进行的操作,即是对node的操作。
在tree类中定义的操作,应该是对整个类的操作,如果将delete操作设为tree的函数,那么还需要通过类的对象再调用这个对象的元素,相当于多增加了一步操作。通过在node中实现,可以简化步骤,便于理解。
search函数再最后一节中纠正了已经