LeetCode 之 路徑總和(簡單 二叉樹)
阿新 • • 發佈:2018-11-07
問題描述:
給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定如下二叉樹,以及目標和 sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1
返回 true
, 因為存在目標和為 22 的根節點到葉子節點的路徑 5->4->11->2
大神的遞迴手法已經絕了,模仿大師寫了一個遞迴。牛逼
public boolean hasPathSum(TreeNode root, int sum) { if(root == null){ return false; } if(root.left == null && root.right == null) { return sum == root.val; } return hasPathSum(root.left,sum - root.val)||hasPathSum(root.right,sum-root.val); }
非遞迴用棧(不推薦,改掉了二叉樹節點的值)
public boolean hasPathSum(TreeNode root, int sum) { Stack <TreeNode> stack = new Stack<> (); stack.push(root) ; while (!stack.isEmpty() && root != null){ TreeNode cur = stack.pop() ; if (cur.left == null && cur.right == null){ if (cur.val == sum ) return true ; } if (cur.right != null) { cur.right.val = cur.val + cur.right.val ; stack.push(cur.right) ; } if (cur.left != null) { cur.left.val = cur.val + cur.left.val; stack.push(cur.left); } } return false ; }
遞迴 遞迴 遞迴 媽的 難難難