树是在实际编程中经常遇到的数据结构,它的逻辑很简单:除了根节点以外,每个节点只有一个父节点,根节点没有父节点;除了叶节点之外所有节点都有一个或多个子节点,叶节点没有子节点。
树的前、中、后序遍历是比较基础,同时也是必须要掌握的几个点,它们分别有递归、和非递归的解法。递归相对简单一点,非递归相对复杂一些。
下面用Java语言分别实现树的前、中、后序递归遍历,另外这边拓展(递归创建二叉树、求树的深度)两个解法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
   | package BiTree;
  import java.util.Scanner;
 
 
 
 
  public class BiTree {
      private Object data;     private BiTree lChild;     private BiTree rChild;
      public BiTree(Object data,BiTree lChild,BiTree rChild){         this.data = data;         this.lChild = lChild;         this.rChild = rChild;     }
      
 
 
      public static void inOrderTraverse(BiTree tree){         if(tree != null) {             inOrderTraverse(tree.lChild);             System.out.print(tree.data);             inOrderTraverse(tree.rChild);         }     }
      
 
 
      public static void afterOrderTraverse(BiTree tree){         if(tree != null){             afterOrderTraverse(tree.lChild);             afterOrderTraverse(tree.rChild);             System.out.print(tree.data);         }     }
      
 
 
      public static void preOrderTraverse(BiTree tree){         if(tree != null){             System.out.print(tree.data);             preOrderTraverse(tree.lChild);             preOrderTraverse(tree.rChild);         }     }
      
 
 
 
 
      public static BiTree createBiTree(Scanner scanner) throws Exception{         int data = scanner.nextInt();         if(data == 0){             return null;         }else{             return new BiTree(data,createBiTree(scanner),createBiTree(scanner));         }     }
      
 
 
 
      public static Integer depth(BiTree tree){         if(tree == null){             return 0;         }else{             Integer m = depth(tree.lChild);             Integer n = depth(tree.rChild);             if(m > n){                 return m+1;             }else{                 return n+1;             }         }
      }
      public static void main(String []args)  throws Exception{         BiTree tree = createBiTree(new Scanner(System.in));         System.out.println();         System.out.println("--------------递归:中序遍历二叉数------------------");         inOrderTraverse(tree);         System.out.println();         System.out.println("--------------递归:先序遍历二叉数------------------");         preOrderTraverse(tree);         System.out.println();         System.out.println("--------------递归:后序遍历二叉数------------------");         afterOrderTraverse(tree);
          System.out.println();         System.out.println("--------------递归:求二叉树的深度------------------");         System.out.println(depth(tree));     }
  }
 
  | 
 
参考:参考: Data Structure (2nd Edition) 第五章http://book.knowsky.com/book_1030305.htm