[Leetcode][第112题][JAVA][路径总和][递归][队列]
【問(wèn)題描述】[中等]
【解答思路】
1. 遞歸
時(shí)間復(fù)雜度:O(N) 空間復(fù)雜度:O(H)
從根節(jié)點(diǎn)開(kāi)始,每當(dāng)遇到一個(gè)節(jié)點(diǎn)的時(shí)候,從目標(biāo)值里扣除節(jié)點(diǎn)值,一直到葉子節(jié)點(diǎn)判斷目標(biāo)值是不是被扣完。
聲明一個(gè)變量記錄已經(jīng)經(jīng)過(guò)的節(jié)點(diǎn)的值之和,每經(jīng)過(guò)一個(gè)節(jié)點(diǎn)就加上這個(gè)節(jié)點(diǎn)的值,在葉子節(jié)點(diǎn)判斷變量值是否為目標(biāo)值。
public boolean hasPathSum(TreeNode root, int sum) {return helper(root,0,sum);}public boolean helper(TreeNode root,int cur,int sum){if(root==null)return false;cur=cur+root.val;if(root.left==null&&root.right==null){return cur==sum;}else{return helper(root.left,cur,sum)|| helper(root.right,cur,sum);}}。2. 廣度優(yōu)先搜索
時(shí)間復(fù)雜度:O(N) 空間復(fù)雜度:O(N)
【總結(jié)】
1.注意事項(xiàng)
2.數(shù)的遞歸
樹(shù)的遞歸題目是非常有套路可循的,因?yàn)闃?shù)有兩個(gè)分支,所以在遞歸里也有兩個(gè)分支,一般是通過(guò) 遞歸 A(||,&&)遞歸 B 來(lái)實(shí)現(xiàn)分支的。只要明白了這一點(diǎn),遞歸函數(shù)就不會(huì)很難設(shè)計(jì)。
3.巧妙使用了兩個(gè)隊(duì)列 一個(gè)隊(duì)列保存遍歷節(jié)點(diǎn) 另一節(jié)點(diǎn)保存和
參考鏈接:https://leetcode-cn.com/problems/path-sum/solution/lu-jing-zong-he-by-leetcode-solution/
參考鏈接:https://leetcode-cn.com/problems/path-sum/solution/lu-jing-zong-he-jie-da-by-commonheart/
總結(jié)
以上是生活随笔為你收集整理的[Leetcode][第112题][JAVA][路径总和][递归][队列]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nowcoder-linux
- 下一篇: [密码学基础][信息安全][每个信息安全