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