Leetcode 404 - 左葉子之和
阿新 • • 發佈:2020-09-19
1 題目
https://leetcode-cn.com/problems/sum-of-left-leaves/
2 題意
計算給定二叉樹的所有左葉子之和。
示例:
3
/ \
9 20
/ \
15 7
在這個二叉樹中,有兩個左葉子,分別是 9 和 15,所以返回 24
3 解題思路
author's blog == http://www.cnblogs.com/toulanboy/
該題比較簡單,考核的是二叉樹的遍歷。
(1)使用先、中、後,任意一種去遍歷所有節點,然後逐一判斷是否是左葉子。
(2)左葉子判斷邏輯為:當前節點是葉子,再判斷是否是其父親的左孩子
**如何知道其是否是其父親的左孩子? **
答:函式引數考慮多一個父親指標,這樣就可以時刻知道該節點的父親。
4 程式碼實現
//author's blog == http://www.cnblogs.com/toulanboy/ /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int ans = 0; //函式邏輯:使用先序遍歷,遍歷所有節點。然後逐一判斷節點是否是左葉子 //引數:root當前樹的根, father是root的父親(用來判斷是否是其左孩子) void get_ans(TreeNode * root, TreeNode * father){ if(root == NULL)//空樹返回 return; //左葉子判斷:當前節點是葉子,再判斷是否是其父親的左孩子 if(root->left == NULL && root->right == NULL && father && root == father->left){ ans += root->val; } get_ans(root->left, root);// 遍歷左子樹 get_ans(root->right, root);// 遍歷右子樹 } int sumOfLeftLeaves(TreeNode* root) { get_ans(root, NULL); return ans; } };