关于二叉树的一点补充。

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

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

 

转载于:https://www.cnblogs.com/tp-16b/p/8284245.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值