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);        
      }
  • 相关阅读:
    。。。
    __new__ 单例
    bokeh
    空间数据可视化
    关系网络图
    Pandas 50题练习
    seaborn
    数据输出及内容美化 简单介绍
    数据分析---项目总结
    数学建模
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/7399292.html
Copyright © 2011-2022 走看看