1、Morris遍历的核心思想
下面介绍莫里斯算法的核心思想:
通过递归和迭代遍历二叉树的核心是回溯,通过栈去回溯已经经过的节点,比如左子树遍历完了,回溯到根节点去遍历右子树,而莫里斯算法对于回溯的实现采用了一种特殊的办法。优点:使得空间效率从O(n)变成了O(1),时间效率依旧是O(N)。
2、moriis遍历的过程
(1)当前节点为cur(即下图中的蓝色箭头),cur来到整个树的头
1)cur无左树时,cur = cur->right;
2) cur有左树时,找到左树(即下图中的黑色箭头)上的最右节点(mostright)
a. mostright的右指针若是指向NULL:
mostright->right = cur; cur = cur->left;
b. mostright的右指针若是指向cur:
mostright->right = null; cur = cur->right;
3) 直到cur = NULL为止
(2) 对下图的遍历过程进行简单的描述
(1)初始状态:cur = root; mostright = root->left;
(2):判断有无左树, 有左树则mostright来到了左树的最右节点:最右节点(mostright->right)为NULL,则mostright->right = cur;
(3):cur = cur->left; mostright = cur->left;
(4):重复(2)
(5): cur = cur->left; mostright = cur->left(NULL);