zoukankan      html  css  js  c++  java
  • 关于二叉树的一点补充。

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

    <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);
    }
  • 相关阅读:
    js事件循环机制event-loop
    javascript编译与执行
    css中rem,em,px的区别和使用场景
    float
    flex布局
    azoux's blog
    1004 成绩排名 PAT Basic Level
    1003 我要通过! PTA Basic Level
    腾讯云防盗链测试
    简单多项式求解
  • 原文地址:https://www.cnblogs.com/tp-16b/p/8284245.html
Copyright © 2011-2022 走看看