一、递归后序遍历
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出来,最终便是左节点、右节点,根节点的后序遍历顺序。