解答
我们在有n个结点的二叉链表中,每个结点有指向左右2个孩子的指针域,所以有2n个指针域,而n个结点的二叉树一共有n-1条分支线,也就是说,其实存在2n-(n-1) = n+1 个空指针域。空间十分浪费。在另一方面,我们对二叉树做中序遍历时,我只知道每个树结点的左右孩子是谁,却不知道该树结点的前驱和后继是谁。要想知道必须重新遍历一遍。
为什么不考虑在创建时就记住这些前驱和后继呢,那将会省去很多时间。仔细想想,如果我们的树结点左右孩子都不为NULL ,如果采用中序遍历,那么该结点的前驱结点是不是左孩子,后继结点是不是右孩子?这就是为什么我们要采用中序遍历的形式来对二叉树进行线索化,那么我需要将孩子结点为NULL的树结点 空间利用起来!因为字节点虽然为NULL,但是都有前驱和后继结点,那么我们可以考虑将 lchild 放树节点的前驱结点,rchild放树结点的后继结点。那么这里我们是否要考虑区分lchild,rchild 是原有的子节点还是我们后续线索化添加的前驱后继结点呢?所以要在线索二叉树结点的数据结构都要体现呗。我们把这种指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的的二叉树就称为线索二叉树(Threaded Binary Tree)。
深圳有好的UI培训班吗?
好文,喜欢看,比书上的好