关于二叉树的一点补充。

上篇小结了一下 关于二叉树的基本内容,这里再作两点补充 :二叉树销毁  和 镜像二叉树

<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);
}

 

posted @ 2018-01-14 20:33  tp_16b  阅读(265)  评论(0编辑  收藏  举报