今天和大家聊的问题叫做 统计同值子树,我们先来看题面:https://leetcode-cn.com/problems/count-univalue-subtrees/
Given a binary tree, count the number of uni-value subtrees.
A Uni-value subtree means all nodes of the subtree have the same value.
给定一个二叉树,统计该二叉树数值相同的子树个数。同值子树是指该子树的所有节点都拥有相同的数值。
示例
Input: root = [5,1,5,5,5,null,5] 5 / \ 1 5 / \ \ 5 5 5 Output: 4
解题
节点node若是同值子树点,则其左右子树首先都是同值子树点,并且左右孩子的val与node的val相同。介于此,遍历node的时候,对左右子树dfs返回一个bool值,若都为真,再将三者的val进行对比,否则直接返回false。
class Solution { public: int countUnivalSubtrees(TreeNode* root) { int sum=0; helper(root,sum); return sum; } bool helper(TreeNode* node,int& sum){ if(node==0){ return true; } bool le=helper(node->left,sum),ri=helper(node->right,sum); if(le and ri){ if(node->left and node->left->val!=node->val){ return false; } if(node->right and node->right->val!=node->val){ return false; } ++sum; return true; } return false; } };
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。