假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。二叉树Btree的后序遍历序列为a0,a1,…an-1,设计一个算法按an-1, an-2,… a0的次序输出各结点值。
//二叉树类
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode() {
}
public TreeNode(int val) {
this.val = val;
}
public TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
/**
* 因为后序遍历的压栈顺序是左-右-根,
* 由于先遍历完左子树,然后遍历完右子树,
* 然后才能处理当前节点,为了和之前的代码的结构保持一致,
* 我们可以反向处理,也就是按根-右-左的顺序压栈。
*/
//后序遍历
public static void postOrder(TreeNode root) {
if (root == null)
return;
postOrder(root.left); //左
postOrder(root.right); //右
System.out.print(root.val+" "); //根
}
//后序遍历逆输出
public static void nxt(TreeNode root) {
if (root == null)
return;
System.out.print(root.val+" "); //根
nxt(root.right); //右
nxt(root.left); //左
}
public static void main(String[] args) {
//建立二叉树
TreeNode root = new TreeNode(4);
TreeNode temp1 = new TreeNode(1);
TreeNode temp2 = new TreeNode(2);
TreeNode temp3 = new TreeNode(3);
TreeNode temp5 = new TreeNode(5);
root.left = temp2;
root.right = temp5;
temp2.right = temp3;
temp2.left = temp1;
System.out.println("后序遍历输出");
postOrder(root);
System.out.println();
System.out.println("后序遍历逆输出");
nxt(root);
}
}