zoukankan      html  css  js  c++  java
  • [leetcode-663-Equal Tree Partition]

    Given a binary tree with n nodes, your task is to check if it's possible to partition the tree to two trees which have the equal sum of values after removing exactly one edge on the original tree.

    Example 1:

    Input:     
        5
       / 
      10 10
        /  
       2   3
    
    Output: True
    Explanation: 
        5
       / 
      10
          
    Sum: 15
    
       10
      /  
     2    3
    
    Sum: 15
    

    Example 2:

    Input:     
        1
       / 
      2  10
        /  
       2   20
    
    Output: False
    Explanation: You can't split the tree into two trees with equal sum after removing exactly one edge on the tree.
    

    Note:

    1. The range of tree node value is in the range of [-100000, 100000].
    2. 1 <= n <= 10000

    思路:

    递归求子树的和,观察子树的和是否是整个树的和的一半即可。

    int sumTree(TreeNode* root)
    {
      if(root==NULL)return 0;
      int left = sumTree(root->left);  
      int right = sumTree(root->right);
      return root->val+left+right;
    }
    
    bool bianli(TreeNode* root,int sum)
    {
      if(root==NULL)return false;
      if(sumTree(root->left)*2==sum)return true;  
      if(sumTree(root->right)*2==sum)return true;
      return (bianli(root->left,sum) ||  bianli(root->right,sum));
    }
     bool checkEqualTree(TreeNode* root)
     {
       if(root==NULL ||(root->left==NULL && root->right==NULL))return false;
        int sum = sumTree(root);
        if(sum%2==1)return false;
         return bianli(root,sum);        
      }
  • 相关阅读:
    设计模式六大原则【转】
    2进制中1的个数
    最大子数组和
    八皇后问题
    读取tomcat下的文件夹路径
    <![CDATA[ ]]>
    数据库(第一范式,第二范式,第三范式)
    input设置disabled,经过strus2提交到后台,后台取不到值
    下载项目乱码
    jsp与Action值得对应
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7399292.html
Copyright © 2011-2022 走看看