最近一直犯一些很憨的错误(lll¬ω¬)
1最小堆,就是基本的插入/删除操作,然后插入的时候调用up上溯函数,删除的时候调用down下溯函数
①这里的改成x!!,不改的话最后一次上溯就没法比较了,down那里没啥,因为用了child嘛
②如果Traverse里面有递归哈,那个flag判断空格的就要放在函数外面,i也要放在外面
另一种打印方法
没用flag,我觉得也很好哈哈
void printheap(Heap h){
for(int i = 1; i < h->size; i++)
cout << h->data[i] << ' ';
cout << h->data[h->size] << endl;
}
③这里的int一定放在外面啊,for循环写顺手就直接在里面定义i了,以后尝试着改过来⑧
④对于up和down函数,为了方便别的位置上面的元素上溯或者下溯,,但是写的时候注意哈,x要等于传过去的h->data[k] ,不是h->data[h->size]啊啊啊
⑤对于down函数,还有一点就是不要忘记写else break;不然的话会进行for循环的第三个句子,i就不对了 ,你也可以写个flag判断一下有没有进入if里面,没进入的话,for出来那个赋值就要变一变,这样就有些麻烦了,还是按书上的来,else break 判断
2.二叉搜索树BST里面
①你要记得,这是指针哎,指针赋值,肯定会变哈(lll¬ω¬)
所以判断原树和镜像翻转树是不是BST的时候,在遍历那里直接变就好,不要反转过来了
②镜像翻转之后哈,不是后序遍历是原树的先序遍历,而是原树先序遍历的逆序,前序遍历是原树的后序遍历的逆序
3.
①指针赋初值,野指针会段错误┭┮﹏┭┮
②while(n–)的时候,n的值会变化的