迭代法後序遍歷二叉樹 和 Morris遍曆法

2021-10-09 21:19:16 字數 619 閱讀 8732

首先宣告乙個棧 stack

若root有左子樹,root入棧,root=root.left,直到root為空,彈出棧頂元素並將其賦值給root

若root沒有右子樹或右子樹已經被訪問,則訪問root節點,用pre記錄root,然後root賦值null

(注意:只有訪問root節點時才更新pre節點)

若root有右子樹,則root入棧,root=root.right

/**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/class

solution

//cur此時一定是null

cur = stack.

pop();

//看是否有右子樹

if(cur.right==null || cur.right==pre)

else

}return res;

}}

迭代法求二叉樹前中後序遍歷

遞迴法求解三種遍歷方式是十分簡單的,但迭代法卻不太簡單,本文給出幾種方式和模板。節點型別 struct treenode 題目 前序遍歷是中左右的循序,根據棧的先入後出的特點,入棧的順序跟遍歷的順序相反,這樣出棧的時候就可以得到想要的順序。遞迴思路 先樹根,然後左子樹,然後右子樹。每棵子樹遞迴。在迭...

迭代法 二叉樹的中序遍歷

給定乙個二叉樹,返回它的中序 遍歷。輸入 1,null,2,3 12 3輸出 1,3,2 通過堆疊實現遞迴的過程 definition for a binary tree node.struct treenode class solution while tree.empty return ans ...

二叉樹的迭代後序遍歷

一 1.將左結點入棧,直至左結點為空 2.判斷右結點 1 若右結點不為空且右結點未被訪問過,則將右結點按照和左結點相同的規則入棧 2 若右結點為空或已被訪問過,則將當前結點輸出,出棧並進行標記 從分支再次進入迴圈,若從 1 進入,則繼續入棧 若從 2 進入,則跳過入棧階段,將當前棧頂置為當前結點 v...