morris演算法的時間複雜度是o(n),空間複雜度為o(1)
基本思想是:
1. 找到當前節點的前驅節點,即左節點的最右節點,若為空則指向當前節點,若為當前節點則表明該節點左邊以及該節點已經遍歷完,並將前驅節點的有指標恢復為空
2. 若當前節點的左節點為空,則直接訪問當前節點右節點
前序遍歷和中序遍歷**差不多,只是visit位置不同
public void morris_preorder(treenode root) else
node2.right = null;
} else
visit(node1);
node1 = node1.right;
}}public void morris_inorder(treenode root) else
node2.right = null;
}visit(node1);
node1 = node1.right;
}}
Morris演算法遍歷二叉樹
中序遍歷 演算法步驟 1 如果當前節點的左子節點為空,則輸出當前節點,並將當前節點置為該節點的右子節點。2如果當前節點的左子節點不為空時,則找到當前節點左子樹的最右節點 該節點為當前節點中序遍歷的前驅節點 a 如果最右節點的右指標為空,則將最右節點的右指標指向當前節點,並把當前節點置為其左子節點。b...
Morris演算法 二叉樹遍歷
一 演算法介紹 morris演算法充分利用了二叉樹葉子節點下的空間,從而可以在時間複雜度為o n 空間複雜度為o 1 的條件下,前中後序遍歷二叉樹 不是完全二叉樹也可以使用 而常見的遍歷二叉樹的方法為遞迴和棧迭代,這兩種方法的時間複雜度雖然也為o n 但是空間複雜度需要o n 因此morris演算法...
精妙的Morris二叉樹遍歷演算法
今天介紹一種精妙的無堆疊,o 1 空間的二叉樹遍歷演算法 morris遍歷 它是morris發明的。大家都很熟悉用遞迴和堆疊來實現二叉樹的遍歷,比如,前序遍歷,中序遍歷,後序遍歷。但morris 遍歷,使用無堆疊,o 1 空間進行二叉樹遍歷。它的原理很簡單,利用所有葉子結點的右指標,指向其後繼結點,...