Это проблема на LeetCode. https://leetcode-cn.com/problems/longest-zigzag-path-in-a-binary-tree/
Пожалуйста, кто-нибудь может сказать мне, почему эти два dfs отличаются в C#.
Я просто добавляю еще одну локальную переменную, и первая - WA , но второе - A C.
//WA
public class Solution {
public int res = 0;
public int LongestZigZag(TreeNode root)
{
int t1 = 1 + dfs(root.left, 1);
int t2 = 1 + dfs(root.right, -1);
Console.WriteLine(res);
Console.WriteLine(t2);
res = Math.Max(res, t1);
res = Math.Max(res, t2);
return res - 1;
}
int dfs(TreeNode t, int flag)
{
if(t == null)
{
return 0;
}
if(flag < 0)
{
int tmp = 1 + dfs(t.left, -flag);
res = Math.Max(res, tmp);
res = Math.Max(res, 1 + dfs(t.right, flag));
return tmp;
}
else
{
int tmp = 1 + dfs(t.right, -flag);
res = Math.Max(res, tmp);
res = Math.Max(res, 1 + dfs(t.left, flag));
return tmp;
}
}
}
Я просто добавил локальную переменную и никогда не думал, что они разные, но это A C. в то время как первый WA.
//AC
public class Solution {
public int res = 0;
public int LongestZigZag(TreeNode root)
{
int t1 = 1 + dfs(root.left, 1);
int t2 = 1 + dfs(root.right, -1);
Console.WriteLine(res);
Console.WriteLine(t2);
res = Math.Max(res, t1);
res = Math.Max(res, t2);
return res - 1;
}
int dfs(TreeNode t, int flag)
{
if(t == null)
{
return 0;
}
if(flag < 0)
{
int tmp = 1 + dfs(t.left, -flag);
res = Math.Max(res, tmp);
int tmp1 = 1 + dfs(t.right, flag);
res = Math.Max(res, tmp1);
return tmp;
}
else
{
int tmp = 1 + dfs(t.right, -flag);
res = Math.Max(res, tmp);
int tmp1 = 1 + dfs(t.left, flag);
res = Math.Max(res, tmp1);
return tmp;
}
}
}