创建二叉树

二叉树在结构上不依赖组织链表

指路法通过根节点与目标节点的相对位置进行定位

#define BT_LEFT 0
#define BT_RIGHT 1

typedef unsigned long long BTPos;

结点指针域定义

typedef struct tag_BTressNode BTressNode;
struct tag_BTressNode
{
    BTreeNode* left;
    BTreeNode* right;
}; 

头结点定义

typedef struct tag_BTree BTree;
struct tag_BTree
{
    int count;
    BTreeNode* root;
};

数据元素定义:

struct Node
{
    BTreeNode header;
    char v;
}

定位:

while((count > 0)&&(current !=NULL))
{
    bit = pos & 1;
    pos = pos >> 1;
    count--;
    parent = current;
    if(bit == BT_LEFT)
    {
        current = current->left;
    }
    else if(bit == BT_RIGHT)
    {
        current = current->right;
    }
}

位运算是是实现指路法的基础

#ifndef BTREE_H
#define BTREE_H
#define BT_LEFT 0
#define BT_RIGHT 1
typedef void BTree;
typedef unsigned long long BTPos;
typedef void (BTree_Printf)(BTreeNode*);
typedef struct tag_BTressNode BTressNode;
struct tag_BTressNode
{
    BTreeNode* left;
    BTreeNode* right;
}; 

BTree* BTree_Create();
void BTree_Destroy(BTree* tree);
void BTree_Clear(BTree* tree);
int BTree_Insert(BTree* tree,BTree* node,BTPos pos,int count,int flag);//pos:二进制表示方向,例如110(左右右)
//flag:标示被替换的结点是插入结点的左子树还是右子树
BTreeNode* BTree_Delete(BTree* tree,BTPos pos,int count);
BTreeNode*  BTree_Get(BTree* tree,BTPos pos,int count);//count:结点数
BTreeNode*  BTree_Root(BTree* tree);
int BTree_Height(BTree* tree);
int BTree_Count(BTree* tree);
int BTree_Degree(BTree* tree);
void BTree_Display(BTree* tree,BTree_Printf* pFunc,int gap,char div);
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值