C#: Alogrithm Почему эти два DFS отличаются? - PullRequest
0 голосов
/ 08 марта 2020

Это проблема на 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...