1. 程式人生 > >列印二叉樹所有路徑---JAVA實現

列印二叉樹所有路徑---JAVA實現

思路:把當前結點儲存到陣列當中,如果當前結點為葉子結點就列印當前陣列,採取遞迴的方式來進行操作。

技巧一:就是陣列的問題,所有路徑結點都存到一個數組當中,由於陣列傳遞是傳址,改變陣列指向內容的時候其他傳遞當前陣列的方法也會受到影響,所以在引數當中還需要一個整形的變數來控制當前這個陣列長度,列印的時候只是列印這個長度的陣列這樣就可以進行區別了。

技巧二:能進行這樣的修改操作是因為程式是線性執行的不會產生資料錯誤的問題,一旦要是並行列印的話就會出現資料多次修改的錯誤

下面是實現程式碼:

    //列印所有當前樹的所有路徑
    //引數為:根節點,儲存結點的陣列,控制路徑長度的整形變數
    //提示 :整形變數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); } }

這個就是列印全部路徑的方法 全部二叉樹操作的方法請參考另一篇文章

相關推薦

列印所有路徑---JAVA實現

思路:把當前結點儲存到陣列當中,如果當前結點為葉子結點就列印當前陣列,採取遞迴的方式來進行操作。 技巧一:就是陣列的問題,所有路徑結點都存到一個數組當中,由於陣列傳遞是傳址,改變陣列指向內容的時候其他

每日一題之 非遞迴後序遍歷列印所有路徑

描述 給一個二叉樹,列印其所有路徑 思路: 利用後序非遞迴遍歷,因為後序非遞迴遍歷的特性,對於每次訪問的節點,棧裡面存的元素都是當前節點的祖先,所以只要判斷當前節點是不是葉子節點,如果是葉子節點,那麼將棧中元素取出,和當前葉子節點組成一條路徑。 #include <

列印所有路徑

問題: 給一個二叉樹,把所有的路徑都打印出來。 比如,對於下面這個二叉樹,它所有的路徑為: 8 -> 3 -> 1 8 -> 2 -> 6 -> 4 8 -> 3 -> 6 -> 7 8 -> 10 -&g

java儲存輸出所有路徑

    LinkedList<LinkedList<Integer>> list=new LinkedList<>();     private void preorder(TreeNode root,LinkedList<Inte

劍指Offer - 的深度(Java實現)

題目描述: 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 思路分析: 方法1:遞迴的思想解決問題。 public class Solution { public int TreeDe

劍指offer--面試題19:的映象--Java實現

題目描述: 請完成一個函式,輸入一個二叉樹,該函式輸出它的映象。 解題思路: 我們先前序遍歷這棵樹的每個結點,如果這個結點有子結點,就交換它的兩個子結點。當交換完所有非葉子結點的左右子結點後,就得到了樹的映象。 這裡採用了遞迴方式和非遞迴方式。

的深度java實現

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。 思路:採用遞迴遍歷的方法,每深入一層,層數加一,最後一層所指向的nul

中找出和為某一值的所有路徑-java實現

一個小演算法,分享一下思路: 描述: 寫一個程式建立一棵二叉樹,並按照一定規則,輸出二叉樹根節點到葉子節點的路徑。 規則如下: 1、從最頂端的根結點,到最下面的葉子節點,計算路徑通過的所有節點的和,如果與設定的某一值的相同,那麼輸出這條路徑上的所有節點。 2、從根節點遍歷

劍指offer----從上到下列印----java實現

題目:從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 思路:其實就是二叉樹的層次遍歷問題,藉助於佇列來實現對二叉樹的層次遍歷 程式碼: import java.util.ArrayList;

從上往下列印Java實現

牛客網測試地址:https://www.nowcoder.com/questionTerminal/7fe2212963db4790b57431d9ed259701 從上往下打印出二叉樹的每個節

JAVA實現從上往下列印(《劍指offer》)

題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 import java.util.ArrayList; import java.util.LinkedList; /** pu

劍指Offer面試題61:按之子型列印 Java實現

/************************************************************** * Copyright (c) 2016, * All rights reserved. * 版 本 號:v1.0

從上往下列印 java

從上往下列印二叉樹 java 題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 思路: 按照層次遍歷的方法,使用佇列輔助。 1.將根結點加入佇列。 2.迴圈出隊,列印當前元素,若該結點有左子樹,則將其加入佇列,若有右子樹,將其加入佇列。 3.直到佇列為空,表明已經

實現一個函式按照之字形列印,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。

 boolean flag1 = true ;                   //利用標誌位來控制順序,為true,則從左到右的順序,為false則相反      

《劍指offer》系列 從上往下列印Java

連結 牛客:從上往下列印二叉樹 題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 思路 題目給定函式返回的只是一個ArrayList,還是比較簡單的,這種型別題目基本都要藉助一個輔助的佇列,看程式碼大家應該都能理解。 程式碼 import ja

真題2004 (非)遞迴層次列印完全所有元素

題目:一棵完全二叉樹結點按層次自上而下,自左而右儲存在一維陣列A[1:n]中(設結點的值為整數)。設計兩個函式(或過程),分別實現下列功能。 (1)按層次依次列印完全二叉樹中所有元素,要求每個元素以一個偶對顯示(X,i),X為元素值,i為該元素在樹中的層次。要求

《劍指offer》系列 從上往下列印Java

連結 題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 思路 題目給定函式返回的只是一個ArrayList,還是比較簡單的,這種型別題目基本都要藉助一個輔助的佇列,看程式碼大家應該都能

系列——路徑系列:根節點到子節點的路徑以及根節點到葉子節點的所有路徑

思路:當用前序遍歷的方式訪問到某一個節點的時候,我們把該節點新增到路徑中。如果該節點的值和我們要找的值相等,則列印路徑,如果不相等,則繼續訪問它的子節點。當前節點訪問結束之後,遞迴函式將自動回到它的父

給定一棵,和一個數值。求路徑和等於給定值的所有路徑

判斷是否有路徑 bool hasPathSum(TreeNode *root, int sum) { if(root==NULL) return false; sum-=root->val;

每天一道LeetCode-----找到所有和為給定值的路徑

Path Sum 判斷二叉樹中有沒有一條從根節點到葉子節點的路徑元素和為給定值 只需要遍歷所有路徑即可,需要注意的是對葉子節點的判斷,需要滿足左右兩個節點都是空的條件時才為葉子節點 程式碼如下 /** * Definition for a