关于二叉树的一点补充。
上篇小结了一下 关于二叉树的基本内容,这里再作两点补充 :二叉树销毁 和 镜像二叉树
<1> 二叉树销毁
在进行销毁时注意两点:
①使用后序遍历的思路进行销毁
②由于最后二叉树销毁后,需要将最初指向树根结点的指针置空,故函数传参需要传二级指针
void DestroyBTree(BTNode** ppTree){ //注意要传二级指针,因为最后要把指向树的指针置空
BTNode* root = *ppTree; //而每次递归传进到函数里的只是原指针值的拷贝(是个复制品)它的改变并不能改变原值。
if(root == NULL){
return;
}
DestroyBTree(&(root->_lchild));
DestroyBTree(&(root->_lchild));
free(root);
*ppTree = NULL;
}
<2>镜像二叉树
顾名思义其就是原二叉树的镜像对称二叉树。如下图
其实它相当于按 根->右->左 的顺序遍历,恰恰和后序遍历反过来;正因如此,才有了前面实现非递归后序遍历的另一种方法(双栈法)。
void MirrorBTree(BTNode* root){
BTNode* tmp = NULL;
if(root == NULL) return;
tmp = root->_lchild;
root->_lchild = root->_rchild;
root->_rchild = tmp;
printf("%d ",root->_data);
MirrorBTree(root->_lchild);
MirrorBTree(root->_rchild);
}
本文来自博客园,作者:tp_16b,转载请注明原文链接:https://www.cnblogs.com/tp-16b/p/8284245.html