思路:把當前結點儲存到數組當中,如果當前結點為葉子結點就列印當前數組,採取遞迴的方式來進行操作。
技巧一:就是數組的問題,所有路徑結點都存到一個數組當中,由於數組傳遞是傳址,改變數組指向內容的時候其他傳遞當前數組的方法也會受到影響,所以在參數當中還需要一個整形的變數來控制當前這個數組長度,列印的時候只是列印這個長度的數組這樣就可以進行區別了。
技巧二:能進行這樣的修改操作是因為程式是線性執行的不會產生資料錯誤的問題,一旦要是並行列印的話就會出現資料多次修改的錯誤
下面是實現代碼:
//列印所有當前樹的所有路徑 //參數為:根節點,儲存結點的數組,控制路徑長度的整形變數 //提示 :整形變數size在這裡十分重要 public void printWay(Node root,String[] path,int size){ //如果根節點為空白直接返回 if(root == null){ return ; } //不為空白把根節點儲存到數組當中 path[size++] = root.getData(); //進行邏輯判斷,看當前結點是不是葉子結點 如果是葉子結點 按照長度為 size進行列印當前數組 if(root.getLeftNode()==null&&root.getRightNode()==null){ System.out.println("路徑"+(++treePath)+"為"); for(int i=0;i<size;i++){ System.out.print(path[i]+" "); } System.out.println(); //如果不是葉子結點遞迴進去繼續往數組中插值 }else{ printWay(root.getLeftNode(),path,size); printWay(root.getRightNode(),path,size); } }
這個就是列印全部路徑的方法 全部二叉樹操作的方法請參考另一篇文章
http://blog.csdn.net/u014494703/article/details/50989223