线索二叉树

Python017

线索二叉树,第1张

二叉树是每个结点最多有两个子结点的树,每个结点有两个指针域,分为指向左结点和右结点。其中满二叉树和完全二叉树可以用数组来表示,而一般的二叉树则通常通过哈希来表示

线索二叉树是利用结点的空指针域存储结点前驱和后续。

由于具有n个结点的二叉链表中,共有2n个指针域,其中只有子结点的有n-1个,空结点有n+1个,故可利用空指针域存放某种遍历次序下的前趋和后继结点的指针,但为了将两种指针进行区分,需要额外的tag参数,用0,1区分该指针是前趋和后继还是子节点指针。

数据结构:

答案是-2的

你可以看到api的解释:

使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过 sort(List)

方法)。

如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点

被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为

list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。

你的ab经过升序排列在第1位(算是第二位,当然此时的0算第一位了),那么返回值就应该是-2;

线索二叉树的意义是减少了的空指针域的同时又对每个节点增加了两个标志位。

实际应用意义:

当路由器使用CIDR,选择下一跳的时候,或者转发分组的时候,通常会用最长前缀匹配(最佳匹配)来得到路由表的一行数据,为了更加有效的查找最长前缀匹配,使用了一种层次的数据结构中,通常使用的数据结构为二叉线索。

线索二叉树优势与不足:

一、优势

1、利用线索二叉树进行中序遍历时,不必采用堆栈处理,速度较一般二叉树的遍历速度快,且节约存储空间。

2、任意一个结点都能直接找到它的前驱和后继结点。

二、不足

1、结点的插入和删除麻烦,且速度也较慢。

2、线索子树不能共用。