后序遍历(LRD)是 二叉树遍历的一种,也叫做 后根遍历、后序周游,可记做左右根。后序遍历有 递归算法和非递归算法两种。在二叉树中,先左后右再根。巧记:左右根。
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。即:
二叉树为空则结束返回,
否则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点
如图所示
后序遍历 - 图1
后序遍历结果:DEBFCA

实现代码

  1. public class Test {
  2. public static void main(String[] args) {
  3. // 以数组形式生成一棵完全二叉树
  4. TreeNode[] node = new TreeNode[10];
  5. for (int i = 0; i < 10; i++) {
  6. node[i] = new TreeNode(i);
  7. }
  8. for (int i = 0; i < 10; i++) {
  9. if (i * 2 + 1 < 10)
  10. node[i].left = node[i * 2 + 1];
  11. if (i * 2 + 2 < 10)
  12. node[i].right = node[i * 2 + 2];
  13. }
  14. postOrderRe(node[0]);
  15. }
  16. public static void postOrderRe(TreeNode biTree) {
  17. // 后序遍历递归实现
  18. if (biTree == null) {
  19. return;
  20. } else {
  21. postOrderRe(biTree.left);
  22. postOrderRe(biTree.right);
  23. System.out.print(biTree.value + " ");
  24. }
  25. }
  26. }
  27. //节点结构
  28. class TreeNode {
  29. int value;
  30. TreeNode left;
  31. TreeNode right;
  32. TreeNode(int value) {
  33. this.value = value;
  34. }
  35. }