• 成员变量的妙用


    通过成员变量的引入实现更为丰富的判断;

    1. 数据结构

    考虑二叉树形结构,如果在结点内部维护有指向父节点的指针(BinNode* parent;)的话,因此可以:

    • 是否为根节点

      
      #define IsRoot(x) (!(x).parent)
      
    • 是否为左孩子结点,

      
      #define IsLChild(x) (!IsRoot(x) && (x).parent->lChild == (x))
      

    2. 引入不引入

    对于二叉树的结点 BinNode 所含有的成员变量,还可添加相应的比如,

    • 针对结点的深度增设成员变量 depth(向下看,height 是向上看);
    • 或者针对以当前结点为根的子树规模(该节点的后代数目)增设成员变量 size;

    利用这些变量固然可以加速静态的查询和搜索,但为了保持这些变量的时效性,在所属二叉树发生结构性调整(比如结点的插入和删除)之后,这些成员变量都需要动态地更新。因此,究竟是否值得引入此类变量,必须结合具体的应用问题,权衡利弊。比如,在二叉树结构改变频繁以至于动态操做原多于静态操做的场合,舍弃深度、子树规模等变量,转而在实际需要时,直接计算这些指标,应是更为明智的选择。

  • 相关阅读:
    腾讯2016年实习生笔试题-蛇形数组-循环枚举遍历
    直接插入排序的加强版
    scanner 在java中的输入
    一种排序
    将string str中的str转换成字符数组
    呜呜呜
    ansible-playbook 实战案例 全网备份 实时备份
    Rsync服务实战
    TCP三次握手与四次握手
    centos 6.9修改系统默认字符集
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423749.html
Copyright © 2020-2023  润新知