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 }
     
  • 相关阅读:
    (五)Spring Cloud教程——Config(F版本)
    (四)Spring Cloud教程——Zuul(F版本)
    (三)Spring Cloud教程——Hystrix(F版本)
    (二)Spring Cloud教程——Ribbon 和 Feign(F版本)
    (一)Spring Cloud教程——Eureka(F版本)
    3年的坚持,最终造就著作——《Learninghard C#学习笔记》
    WPF快速入门系列(9)——WPF任务管理工具实现
    WPF快速入门系列(8)——MVVM快速入门
    [WPF实用技巧]如何使WPF的TreeView节点之间有连线
    WPF快速入门系列(7)——深入解析WPF模板
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10925417.html
Copyright © 2011-2022 走看看