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 }
     
  • 相关阅读:
    [WARNING] 找不到编译器:wepy-compiler-less。 [Error] 未发现相关 less 编译器配置,请检查wepy.config.js文件。
    wepy-cli : Failed to download repo standard: getaddrinfo ENOENT raw.githubusercontent.com
    火币Huobi 币安 Binance ios 反编译
    iPhone 反编译-微信多开分身版原理,一部iPhone登录多个微信号
    安卓微信分身版 一部手机同时登录多个微信号 原理
    微信smali反编译 查看撤回消息
    微信抢红包
    Dota2 荒神罪 破解
    微信smali反编译 语音消息转发功能
    mac安装mysql流程
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10925417.html
Copyright © 2011-2022 走看看