687. 最长同值路径

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-univalue-path
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


不能使用从上到下的遍历,因为遍历完左子树的信息,无法传递到右子树。所以要用回溯

    int ret = 0;
    public int longestUnivaluePath(TreeNode root) {
        dfs(root);
        return ret;

    }
    //从上向下不行,因为右孩子无法得到左孩子的更新信息,它的信息只能获得父节点的。
    // 所以要回溯。
    public int dfs(TreeNode node) {
        if(node == null) {
            return 0;
        }

        int left = dfs(node.left);
        int right = dfs(node.right);
        
        // 左孩子没有就设置为0  
        if(node.left == null || node.left.val != node.val) {
            // if(node.right == null || node.right.val != node.val) {
            //     return 0;
            // } else {
            //     ret = Math.max(ret,right+1);
            //     return right +1;
            // }
            left = 0;

        }

        if(node.right == null || node.right.val != node.val) {
            // if(node.left == null || node.left.val != node.val) {
            //     return 0;
            // } else {
            //     ret = Math.max(ret,left+1);
            //     return left+1;

            // }
            right = 0;


        }
        // 由于返回的是Math.max(left,right) +1,所以计算left和right时不用+1;
        ret = Math.max(ret,left+right);
        return Math.max(left,right) +1;
    }

posted @ 2022-02-24 16:27  一颗青菜  阅读(3)  评论(0)    收藏  举报