为了账号安全,请及时绑定邮箱和手机立即绑定
如果删除根节点要把后面的子节点也删掉吧,使用递归:int leftPos = nodeIndex*2 + 1;
int rightPos = nodeIndex*2 + 2;
int temp = 0;
if(leftPos <= m_iSize && m_pTree[leftPos] != 0){
DeleteNode(leftPos,&temp);
}
if(rightPos <= m_iSize && m_pTree[rightPos] != 0){
DeleteNode(rightPos,&temp);
}

已采纳回答 / Wangge213
层序遍历是一层一层进行访问 中序遍历是先访问左子树,然后访问根节点,最后访问右子树
做了人生中第一次有意义的debug,有问题,耐心一点,一层层剥开,终会找到bug!

把void Node::DeleteNode()中的代码:this->pParent->pRChild = NULL;写成了this->pParent->pParent=NULL,因此删除结点6时,采用后序遍历,第五次当要访问结点6的双亲结点2时就出现了问题,发生访问冲突!(我排查到了DeleteNode有问题,但编译通过,逻辑有问题,怪不得一直没有查出来!)
不是递归,递归是函数A里面调用函数A自身,此处的两个searchNode不是同一个函数
今天就上数据结构的二叉树,发现这个视频比书本上已经老师讲解的都要清晰~
感谢
看完了,感觉我智商有点跟不上呀呀呀呀
在构造时全部初始化为0会影响AddNode()中节点是否存在的判断啊,我插入编译运行结果是 3 0 0 0 0 0 0 0 0 0,
注释掉才正常
看完感觉自己智商有点捉急
《数据结构探险之树篇》代码修正
http://www.imooc.com/article/13384
上有老下有小醉了

已采纳回答 / 幕幕的
你的node1,node2的增加不对,看下前面的代码
有个疑问,在AddNode函数中,如果查找到该索引的结点已经有左右子结点了,此时我调用AddNode,direction为0,那么函数内部直接将该结点的左子节点指向新结点,这样是否会造成原来的左子结点内存泄漏?此时函数内是否应该添加一个判断,当结点有左右子结点时,直接返回添加失败?

最赞回答 / 慕姐3585284
是的,就是如此。James老师这个树篇讲得不太好。而且也没有讲BST,平衡二叉树等较深入较实用的知识。。。o(╯□╰)o希望他后面能补上吧。。。
有没有课后作业可以自己编码实践一下的
课程须知
应该熟练掌握C++相关语法,重点掌握数组、结构体及递归函数,需要熟悉线性表和链表相关内容
老师告诉你能学到什么?
通过课程的学习,你将掌握树的相关概念,数组二叉树,链表二叉树及二叉树递归实现的前序遍历、中序遍历和后序遍历

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消