zoukankan      html  css  js  c++  java
  • 树——二叉树结点的查找

    1,查找方式:

           1,基于数据元素值的查找:

                  1,BTreeNode<T>* find(const T& value) const

           2,基于结点的查找:

                  1,BTreeNode<T>* find(TreeNode<T>* node) const 

                

    2,树中数据元素和结点的查找:

     

          

    3,基于数据元素值的查找:

     

           1,定义功能:find(node, value)

                  1,在 node 为根结点的二叉树中查找 value 所在的结点:

           2,功能函数代码实现:

     1    /*定义按照值查找的递归功能函数*/
     2    virtual BTreeNode<T>* find(BTreeNode<T>* node, const T& value) const  
     3     {
     4         BTreeNode<T>* ret = NULL;
     5 
     6         if( node != NULL )  // 查找的不是空结点
     7         {
     8             if( node->value == value )  // 根结点值相等,则找到了
     9             {
    10                 ret = node;
    11             }
    12             else
    13             {
    14                 if( ret == NULL )  // 根结点没有查到,查左子树
    15                 {
    16                     ret = find(node->left, value);
    17                 }
    18 
    19                 if( ret == NULL )  // 左子树没有查到,查右子树
    20                 {
    21                     ret =  find(node->right, value);
    22                 }
    23             }
    24         }
    25 
    26         return ret;
    27    }

      3,成员函数的代码实现:

    1 BTreeNode<T>* find(const T& value) const 

    2 {

    3 return find(root(), value);

    4 }
     

    4,基于结点的查找:

           1,定义功能:find(node, obj)

                  1,在 node 为根结点的二叉树中查找是否存在 obj 结点;

      2,功能函数代码实现:

     1    /*定义按照结点查找的递归功能函数*/
     2     virtual BTreeNode<T>* find(BTreeNode<T>* node, BTreeNode<T>* obj) const
     3     {
     4         BTreeNode<T>* ret = NULL;
     5 
     6         if( node == obj )  // 如果是根结点
     7         {
     8             ret = node;  // 地址赋值给返回值
     9         }
    10         else
    11         {
    12             if( node != NULL )  // 查找结点非空
    13             {
    14                 if( ret == NULL )  // 不是根结点
    15                 {
    16                     ret = find(node->left, obj);  // 查找左子树
    17                 }
    18 
    19                 if( ret == NULL )
    20                 {
    21                     ret = find(node->right, obj);  // 查找右子树
    22                 }
    23             }
    24         }
    25 
    26         return ret;
    27    }

           3,成员函数代码实现:

    1 BTreeNode<T>* find(TreeNode<T>* node) const 

    2 {

    3 return find(root(), dynamic_cast<BTreeNode<T>*>(node));

    4 }
     
  • 相关阅读:
    ApkTool动态打包
    Android
    hi3531 SDK 编译 uboot, 改动PHY地址, 改动 uboot 參数 .
    Unityclient通信測试问题处理(二)
    LIVE555研究之三:LIVE555基础
    【Unity Shaders】使用CgInclude让你的Shader模块化——创建CgInclude文件存储光照模型
    deep-learning-frameworks
    Upgrade R (升级R语言)
    Upgrade Bioconductor
    linux 中 ll 命令如何让查询结果按时间升序或降序排序?
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10925417.html
Copyright © 2011-2022 走看看