題目描述
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
思路分析
先序遍歷,訪問節點時,把該節點新增到路徑上去,並累加該節點的值
如果該節點為葉節點,並且路徑中節點值的和剛好等於輸入的整數,則符合當前路徑要求
當前節點訪問完畢,要回到父節點訪問其他節點,所以,在退出方法前要在路徑上刪除當前節點並減去當前節點值,以確保返回父節點時路徑剛好是從根節點到父節點。
**
arraylist> list = new arraylist>();
arraylistlist1 = new arraylist();
public arraylist> findpath(treenode root,int target)
list1.add(root.val); // 新增根節點的值
target = target - root.val;
if (target==0 && root.left==null && root.right==null)
findpath(root.left, target); //對左右子樹開始遞迴,即遍歷整個樹
findpath(root.right, target);
list1.remove(list1.size()-1);
return list;
}
結果
劍指offer系列 二叉樹的深度
題目描述 輸入一棵二叉樹,求其深度 樹的深度定義為 從根節點到葉子節點的路徑長度的最大值 示例 分析 對每個節點而言,以該節點為根節點的樹的深度為左子樹和右子樹深度的較大值加1.因此用遞迴可以很容易的實現 int depth treenode root 分析 同樣可以用遞迴來實現。為了使每個節點只遍...
劍指offer 二叉樹 二叉樹搜尋樹
package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...
劍指offer 平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹 1 重複遍歷結點 參考上一題求二叉樹的深度,先求出根結點的左右子樹的深度,然後判斷它們的深度相差不超過1,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...