LeetCode 5338. 二叉樹中的最長交錯路徑(dfs)
- 2020 年 3 月 11 日
- 筆記
題目鏈接:https://leetcode-cn.com/problems/longest-zigzag-path-in-a-binary-tree/
比賽的時候沒調出來,其實就是一個小地方出了問題,改兩個參數就可以過…思路就是我們分類去進行深搜,記錄左右兩個的子節點的狀態,然後判斷下面的子結點,如果相反就+1,否則就重新設為1(我就是因為這裡沒有重新設為1,而是默認的繼承了cnt才出的問題,顯然這裡應該是要重新設為1的)。
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: int ans; void dfs(TreeNode *r,bool f, int cnt){ if(r == NULL) return ; ans = max(ans, cnt); if(r->right) dfs(r->right, 1, f == 1 ? 1 : cnt + 1); if(r->left) dfs(r->left, 0, f == 0 ? 1 : cnt + 1); return ; } int longestZigZag(TreeNode* root) { ans = 0; if(root->left) dfs(root->left, 0, 1); if(root->right) dfs(root->right, 1, 1); return ans; } };