首先宣告乙個棧 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...