leetcode 94. 二叉樹的中序遍歷(Java 二叉樹中序非遞歸遍歷)
很久沒寫算法,一個水題竟然寫了好久
class TreeNode
{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x)
{
val = x;
}
}
/**
* 二叉樹非遞歸中序遍歷思路
* 本質其實是類似於雙指針
* 一個指向前一個節點,另一個指向正在遍歷的節點
* 1)若其左孩子不爲空,則將P入棧並將P的左孩子置爲當前的P,然後對當前結點P再進行相同的處理;
* 2)若其左孩子爲空,則取棧頂元素並進行出棧操作,訪問該棧頂結點,然後將當前的P置爲棧頂結點的右孩子;
* 3)直到P爲NULL並且棧爲空則遍歷結束。
*/
class Solution
{
List<Integer> data;
public List<Integer> inorderTraversal(TreeNode root)
{
data=new ArrayList<>();
Stack<TreeNode> temp=new Stack<>();
TreeNode treeNode=root;
while (treeNode!=null||!temp.empty())
{
while (treeNode!=null)
{
temp.push(treeNode);
treeNode=treeNode.left;
}
if (!temp.empty())
{
treeNode=temp.pop();
data.add(treeNode.val);
treeNode=treeNode.right;
}
}
return data;
}
}