树——二叉树结点的查找

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 }
 

猜你喜欢

转载自www.cnblogs.com/dishengAndziyu/p/10925417.html
今日推荐