給定二叉樹的根節點?
root
?,返回所有左葉子之和。示例 1:
輸入: root = [3,9,20,null,null,15,7] 輸出: 24 解釋: 在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24示例?2:
輸入: root = [1] 輸出: 0提示:
- 節點數在?
[1, 1000]
?范圍內-1000 <= Node.val <= 1000
Java 解題思路及代碼實現
package com.java.leetcode.tree;import com.java.leetcode.compent.TreeNode;import java.util.Stack;/*** 給定二叉樹的根節點 root ,返回所有左葉子之和。**** 示例 1:**** 輸入: root = [3,9,20,null,null,15,7]* 輸出: 24* 解釋: 在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24* 示例 2:** 輸入: root = [1]* 輸出: 0*** 提示:** 節點數在 [1, 1000] 范圍內* -1000 <= Node.val <= 1000*/
public class sumOfLeftLeaves404 {/*** 遞歸函數* * 1、參數:* * root* * 2、終止條件:* * 遇到葉子結點記錄左葉子結點之和 其余返回0;* * 3、確定單層遞歸的邏輯:* * 遇到 左葉子節點 加和 遇到右子樹做葉子結點 加和* * 兩者相加獲取整體左葉子節點加和* @param root* @return*/public int sumOfLeftLeaves(TreeNode root) {// 遍歷到空節點 返回 0;if(root==null){return 0;}// 如果遍歷到葉子結點 那么其值左右葉子結點也為空節點if(root.left==null&&root.right==null){return 0;}int leftnum= sumOfLeftLeaves(root.left);//if(root!=null&&root.left!=null&&root.left.left==null&&root.left.right==null){// 加和leftnum=root.left.val;}// 右節點int rightnum=sumOfLeftLeaves(root.right);int sumnum=leftnum+rightnum;return sumnum;}/*** 迭代法 :* 通過棧的形式進行左子樹之和統計\** 通過前序遍歷獲取所有節點* @param root* @return*/public int sumOfLeftLeaves2(TreeNode root) {int res=0;if(root==null){return 0;}Stack<TreeNode> stack=new Stack<>();stack.push(root);// 判斷棧是否為空while(!stack.isEmpty()){TreeNode node=stack.pop();// 判斷是否為左葉子節點if(node.left!=null&&node.left.left==null&&node.left.right==null){res+=node.left.val;}if(node.left!=null){stack.push(node.left);}if(node.right!=null){stack.push(node.right);}}return res;}}