二叉樹遍歷演算法 Morris演算法

2021-10-07 08:16:59 字數 517 閱讀 1791

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 空間進行二叉樹遍歷。它的原理很簡單,利用所有葉子結點的右指標,指向其後繼結點,...