先从父结点遍历左子节点,一直遍历到不再存在左子节点,然后从栈顶开始检查,对刚才遍历的节点进行逆向遍历,找到每一个节点的右子节点,如果这些右子节点有左节点就继续压入栈中(相当于下次遍历要从这个右子节点的左子树开始),继续上面的过程。 整个相当于深度优先遍历,从每个节点的左节点遍历,遍历父节点,最后遍历右...
对于一般的遍历算法,我们都是利用栈来存储之后需要再次访问的节点。最差情况下,我们需要存储整个二叉树节点。所以空间复杂度为O(n)。而Morris遍历则是将空间复杂度降到了O(1)级别。Morris遍历用到了“线索二叉树”的概念,其实就是利用了叶子节点的左右空指针来存储某种遍历前驱节点或者后继节点。因此没有使用额外...
mirror遍历用到了线索二叉树的思想,在Morris方法中不需要为每个节点额外分配指针指向其前(predecessor)和后继节点(successor),只需要利用叶子节点中的左右空指针指向某种顺序遍历下的前驱节点或后继节点就可以了 。 Morris的整体思路就是将 以某个根结点开始,找到它左子树的最右侧节点之后与这个根结点进行连接 我们可以...
先从父结点遍历左子节点,一直遍历到不再存在左子节点,然后从栈顶开始检查,对刚才遍历的节点进行逆向遍历,找到每一个节点的右子节点,如果这些右子节点有左节点就继续压入栈中(相当于下次遍历要从这个右子节点的左子树开始),继续上面的过程。 整个相当于深度优先遍历,从每个节点的左节点遍历,遍历父节点,最后遍历右...