补上很久前在线写后浏览器崩溃一篇文章,重写了一次
线索树: 二叉树中利用NULL链域的一种变形二叉树中度数为0或1的节点有2个或1个的链域,其值为NULL,这些链域都浪费了,所以对这些链域加以利用,使得二叉树的某些操作效率更佳.
ps: 如果以计算一棵二叉树的所有链域 (n0 n1 n2 三种节点,度数分别为0,1,2) 度数: 子节点的个数, 则树的总链域数 为 2*(n2+n1+n0),而值为NULL的链域数为n1+2*n0;(n0=n2+1) ,所以如果有2n 个链域,就有 n+1 个链域是无用的,这是一种浪费
线索的含义:1)如果节点有左子树,左链域就指向左子树,否则,就指向其在树 中序遍历中 的前驱节点
2)如果节点有右子树,右链域就指向右子树,否则,就指向其在树 中序遍历中 的后驱节点
ps:由于链域有两种用途,所以要另外设置两个标志域,指明链域的用途下面是节点的结构:
template<class T>
class tnode
{
public:
tnode(T data=T(),
bool ltd=false, tnode* lcd=NULL,
bool rtd=false, tnode* rcd=NULL)
:data(data),ltd(ltd),lcd(lcd),rtd(rtd),rcd(r