C++数据结构第62课、二叉树中的结点查找操作

  • 查找操作的方式
    — 基于数据元素值的查找:BTreeNode<T>* find(const T& value) const
    — 基于结点的查找:BTreeNode<T>* find(TreeNode<T>* node) const

在这里插入图片描述

  • 基于数据元素值的查找
    — 定义功能:find(node, value) 在 node 为根结点的二叉树中查找 value 所在的结点
    在这里插入图片描述
  • 基于结点的查找
    定义功能:find(node, obj) 在 node 为根结点的二叉树中查找是否存在 obj 结点
    在这里插入图片描述

BTreeNode.h

#ifndef BTREENODE_H
#define BTREENODE_H
#include "TreeNode.h"

namespace XiebsLib
{

template <typename T>
class BTreeNode : public TreeNode<T>
{
protected:


public:
    BTreeNode<T>* left;
    BTreeNode<T>* right;

    BTreeNode()
    {
        left = nullptr;
        right = nullptr;
    }

    static BTreeNode<T>* NewNode()
    {
        BTreeNode<T>* ret = new BTreeNode<T>;
        if(ret != nullptr)
        {
            ret->m_flag = true;
        }
        return ret;
    }
};
}
#endif // BTREENODE_H

BTree.h

#ifndef BTREE_H
#define BTREE_H

#include "Tree.h"
#include "BTreeNode.h"
#include "Exception.h"
#include "LinkQueue.h"


namespace XiebsLib
{

template <typename T>
class BTree : public Tree<T>
{
protected:
    virtual BTreeNode<T>* find(BTreeNode<T>* node,const T& value)const
    {
        BTreeNode<T>* ret = nullptr;

        if(node != nullptr)
        {
            if(node->value == value)
            {
                ret = node;
            }
            else
            {
                if(ret == nullptr)
                {
                    ret = find(node->left, value);
                }

                if(ret == nullptr)
                {
                    ret = find(node->right, value);
                }
            }
        }

        return ret;
    }

    virtual BTreeNode<T>* find(BTreeNode<T>* node, BTreeNode<T>* obj)const
    {
        BTreeNode<T>* ret = nullptr;

        if(node != nullptr)
        {
            if(node == obj)
            {
                ret = node;
            }
            else
            {
                if(ret == nullptr)
                {
                    ret = find(node->left, obj);
                }

                if(ret == nullptr)
                {
                    ret = find(node->right, obj);
                }
            }
        }

        return ret;
    }

public:
    bool insert(TreeNode<T>* node)
    {
        bool ret;

        return ret;
    }

    bool insert(const T& value, TreeNode<T>* parent)
    {
        bool ret;

        return ret;
    }

    SharedPointer< Tree<T> > remove(const T& value)
    {
        return nullptr;
    }

    SharedPointer< Tree<T> > remove(TreeNode<T>* node)
    {
        return nullptr;
    }

    BTreeNode<T>* find(const T& value)const
    {
        return find(root(), value);
    }

    BTreeNode<T>* find(TreeNode<T>* node)const
    {
        return find(root(), dynamic_cast<BTreeNode<T>*>(node));
    }

    BTreeNode<T>* root()const
    {
        return dynamic_cast<BTreeNode<T>*>(this->m_root);
    }

    int degree()const
    {
        return 0;
    }

    int count()const
    {
        return 0;
    }

    int height()const
    {
        return 0;
    }

    void clear()
    {

    }

    ~BTree()
    {
        clear();
    }

};
}
#endif // BTREE_H
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值