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;      }  };