?LeetCode刷題實戰(zhàn)113:路徑總和 II
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum. Note: A leaf is a node with no children.
題意

解題
class?Solution?{
????List<List> ret = new?LinkedList<List >();
????Dequepath = new?LinkedList ();
????public?List<List> pathSum(TreeNode root, int sum) {
????????dfs(root, sum);
????????return?ret;
????}
????public?void dfs(TreeNode root, int sum) {
????????if?(root == null) {
????????????return;
????????}
????????path.offerLast(root.val);
????????sum -= root.val;
????????if?(root.left == null?&& root.right == null?&& sum == 0) {
????????????ret.add(new?LinkedList(path));
????????}
????????dfs(root.left, sum);
????????dfs(root.right, sum);
????????path.pollLast();
????}
}
方法二:廣度優(yōu)先搜索
class?Solution?{
????List> ret = new?LinkedList
>();
????Mapmap = new?HashMap ();
????public?List> pathSum(TreeNode root, int?sum) {
????????if?(root == null) {
????????????return?ret;
????????}
????????QueuequeueNode = new?LinkedList ();
????????QueuequeueSum = new?LinkedList ();
????????queueNode.offer(root);
????????queueSum.offer(0);
????????while?(!queueNode.isEmpty()) {
????????????TreeNode node = queueNode.poll();
????????????int?rec = queueSum.poll() + node.val;
????????????if?(node.left == null?&& node.right == null) {
????????????????if?(rec == sum) {
????????????????????getPath(node);
????????????????}
????????????} else?{
????????????????if?(node.left != null) {
????????????????????map.put(node.left, node);
????????????????????queueNode.offer(node.left);
????????????????????queueSum.offer(rec);
????????????????}
????????????????if?(node.right != null) {
????????????????????map.put(node.right, node);
????????????????????queueNode.offer(node.right);
????????????????????queueSum.offer(rec);
????????????????}
????????????}
????????}
????????return?ret;
????}
????public?void?getPath(TreeNode node) {
????????Listtemp = new?LinkedList ();
????????while?(node != null) {
????????????temp.add(node.val);
????????????node = map.get(node);
????????}
????????Collections.reverse(temp);
????????ret.add(new?LinkedList(temp));
????}
}
好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力。
