对于树的递归,不,应该说对于递归,我一直都不是特别的懂,一直处于混沌状态。对于树的遍历,当初学数据结构的时候,自己能按照规则遍历出来,但是用程序当时根本就不明白。其实递归已经在很对地方讲到了,可我就是不明白,估计这是我的一个要害。
还在看算法,Java实现树的递归遍历,不错不错,稍稍修改了,保存起来,虽然是一个很简单的程序,但�歉业钠舴⒑艽螅匾乃枷氩皇锹穑�
树是如附件所示的那个样子。
1 |
package alg; public class TraverTree { static class Item{ int text; Item(int i){ this.text=i; } private void visit(){ System.out.print(this.text+","); } }//class Item static class Node{ Item item; Node right; Node left; Node(Item item,Node l,Node r){ this.item=item; this.right=r; this.left=l; } }//class Node private static void traverM(Node n){ if(n==null)return; traverM(n.left); n.item.visit(); traverM(n.right); }//中序遍历 private static void traverF(Node n){ if(n==null)return; n.item.visit(); traverF(n.left); traverF(n.right); }//先序遍历 private static void traverL(Node n){ if(n==null)return; traverL(n.left); traverL(n.right); n.item.visit(); }//后序遍历 public static void main(String[] args) { Node root=createTree(); System.out.print("中序遍历的结果是:"); traverM(root); System.out.println(); System.out.print("先序遍历的结果是:"); traverF(root); System.out.println(); System.out.print("后序遍历的结果是:"); traverL(root); } public static Node createTree(){ //生成叶子节点 Item item=new Item(6); Node leaf_1=new Node(item,null,null); item=new Item(7); Node leaf_2=new Node(item,null,null); item=new Item(10); Node leaf_3=new Node(item,null,null); item=new Item(12); Node leaf_4=new Node(item,null,null); item=new Item(5); leaf_1=new Node(item,leaf_1,leaf_2); item=new Item(8); leaf_2=new Node(item,leaf_3,leaf_4); item=new Item(1); Node root=new Node(item,leaf_1,leaf_2); return root; //返回根节点 } } |