一、遞歸后序遍歷
public static void postOrder(TreeNode root) {
if (root == null) {
return;
}
postOrder(root.getLeft());
postOrder(root.getRight());
System.out.println(root.getValue());
}
二、非遞歸后序遍歷
public static void postOrderIterative(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> tempTreeNodeStack = new Stack<>();
Stack<TreeNode> finalTreeNodeStack = new Stack<>();
tempTreeNodeStack.push(root);
while (!tempTreeNodeStack.isEmpty()) {
TreeNode currentNode = tempTreeNodeStack.pop();
finalTreeNodeStack.push(currentNode);
if (currentNode.getLeft() != null) {
tempTreeNodeStack.push(currentNode.getLeft());
}
if (currentNode.getRight() != null) {
tempTreeNodeStack.push(currentNode.getRight());
}
}
while (!finalTreeNodeStack.isEmpty()) {
System.out.println(finalTreeNodeStack.pop().getValue());
}
}
采用了兩個stack進行,先按照,根節點、右節點、左節點的順序放入棧中,讓再pop出來,最終便是左節點、右節點,根節點的后序遍歷順序。