1、指路法定位结点
从根结点开始,指出访问每个结点所走的路径。
- 指路法通过根结点与目标结点的相对位置进行定位
- 指路法可以避开二叉树递归的性质“线性”定位
2、指路法的实现
在C语言中可通过bit位来指路,如果bit位为0,则“左转”,如果bit位为1,则“右转”;
定义如下:
#define BT_LEFT 0
#define BT_RIGHT 1
typedef unsigned long long BTPos; //指定寻找"路径"
3、二叉树存储结构定义
- 用结构体来定义二叉树中的指针域
- 二叉树的头结点也可以用结构体实现
结点指针域的定义:
typedef struct _struct_btreenode BTreeNode;
struct _struct_btreenode
{
BTreeNode *left;
BTreeNode *right;
};
头结点定义:
typedef struct _struct_tbtree
{
int count;
BTreeNode *root;
}TBTree;
数据结点定义:
typedef struct _struct_node
{
BTreeNode header;
char v;
}Node;
4、二叉树的定位操作
关键技巧:
- 利用二进制中的 0 和 1 分别表示left和right
- 位运算是实现指路法的基础
while((count > 0) && (current != NULL))
{
bit = pos & 1;
pos = pos >>