zoukankan      html  css  js  c++  java
  • LeetCode687----最长同值路径

    给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。

    注意:两个节点之间的路径长度由它们之间的边数表示。

    示例 1:

    输入:

                  5
                 / 
                4   5
               /    
              1   1   5
    

    输出:

    2
    

    示例 2:

    输入:

                  1
                 / 
                4   5
               /    
              4   4   5
    

    输出:

    2
    

    注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。

    思路:我们可以通过树结构发现,我们的每一个不同的同值路径(例如同值为2,或者同值为3),他们之间都是互不影响的,每次从一个同值路径跳到另一个同值路径时,前一个同值路径的状态不会影响到后一个同值路径:

    当同值为4的路径走到3时,这时就应该断开4的状态,一切从0开始,直到同值为5的路径开始,于是乎上图我们又可以这样来画!

    既然状态会断开,那么这里的3我们可以默认省去,这样,程序不论是走到最左下角的4节点还是最左下角的5节点,默认返回给其父节点的都是0

    代码如下:

    class Solution {
        public int max;
        
        public int longestUnivaluePath(TreeNode root) {
    		help(root);
    		return max;
    	}
    
    	public int help(TreeNode root) {
    		if (root == null) {
    			return 0;
    		}
    		int l = help(root.left);// 得到左边最大的路径
    		int r = help(root.right);// 得到右边最大的路径
            int left = 0,right = 0;
    		if (root.left != null && root.val == root.left.val) {
    			// 证明根节点和当前的左子节点在一个路径
    			left=l + 1;
    		}
    		if (root.right != null && root.val == root.right.val) {
    			right=r + 1;
    		}
    		max = Math.max(max, left + right);
    		return Math.max(left, right);
    	}
    }
    

      

  • 相关阅读:
    TIM时钟频率计算
    时钟节拍tick
    Continue作用
    struct结构体的字节长度,字节对齐
    IAR所包含的头文件位置
    Oracle存储过程给变量赋值的方法
    DataTable如何去除重复的行
    C#遍历窗体所有控件或某类型所有控件
    SqlServer无备份下误删数据恢复
    45.4.7 序列:USER_SEQUENCES(SEQ)
  • 原文地址:https://www.cnblogs.com/Booker808-java/p/9215880.html
Copyright © 2011-2022 走看看