(LeetCode 513) 找樹左下角的值 [DFS + 找樹左下角的值=葉子節點 + 最左(第一次出現) ]
阿新 • • 發佈:2019-01-01
513. 找樹左下角的值
給定一個二叉樹,在樹的最後一行找到最左邊的值。
示例 1:
輸入:
2
/ \
1 3
輸出:
1
示例 2:
輸入:
1
/ \
2 3
/ / \
4 5 6
/
7
輸出:
7
分析:
題目求解問題樹的最後一行找到最左邊的值 等價於以下兩個條件
(1)葉子節點
(2)最左出現。
對於(1)只需判斷左右節點同時為NULL即可。
對於(2):
使用先序(前序)遍歷樹中的節點,那麼出處於同一層的節點,一定滿足左邊的先出現。
只有遇到深度更大的葉子節點時,答案才更新。
使用兩個變數記錄當前ans答案值,和它所在的深度ansd即可。
AC程式碼:
/** * 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: void dfs(TreeNode* c, int d, int& ans, int& ansd) { if(c == NULL) return; if(d > ansd && c->left==NULL && c->right==NULL) { ansd = d; ans = c->val; } dfs(c->left,d+1,ans,ansd); dfs(c->right,d+1,ans,ansd); } int findBottomLeftValue(TreeNode* root) { int ans = root->val; int ansd = 0; dfs(root,0,ans,ansd); return ans; } };