数据结构——二叉树线索化 根据某种遍历序列(前、中后序遍历),先确定下来每个节点的前驱和后继。对于每个节点来说,他的左右指针可能没有指向节点(值为NULL),这时候我们可以运用这些“空闲”的指针。比如:左指针如果有空闲,就用这个指针指向这个节点对应遍历序列的前驱,右指针如果有空闲,就用这个指针指向这个节点对应遍历序列的后继。(注意:遍历序列中一头一尾是没有前驱或者后继的,所以如果指针有空闲,我们还是当它指向的是孩子,而不是前驱或者后继)对于每个节点都实现了步骤2后,线索化完成。
数据结构——二叉树的遍历 是因为我们下面的else里面是关于从右边返回之后就要遍历根节点的代码,下面的条件含有flag == node->right,而且我们没有从右边返回的时候未必上一次访问的节点就是node的左孩子节点,因为返回之后可能会向右再一路向左,不知道跑到哪里去了,但是从右边返回之后,上一次访问的节点必然是右孩子节点,这一点读者可以尝试一下两种写法最终调试结果的区别。中序遍历和先序遍历不同,他并不是走到某个节点就会对其访问,“左根右”的顺序决定了,遍历时会”一路向左“,一直去优先遍历左子树,左子树的左子树……