1. 题⽬链接:2331.计算布尔⼆叉树的值
2. 题⽬描述:
3. 解法(递归):
算法思路:
本题可以被解释为:
1. 对于规模为n的问题,需要求得当前节点值。
2. 节点值不为0或1时,规模为n的问题可以被拆分为规模为n-1的⼦问题:
a. 所有⼦节点的值;
b. 通过⼦节点的值运算出当前节点值。
3. 当问题的规模变为n=1时,即叶⼦节点的值为0或1,我们可以直接获取当前节点值为0或1。
算法流程:
递归函数设计:bool evaluateTree(TreeNode* root)
1. 返回值:当前节点值;
2. 参数:当前节点指针。
3. 函数作⽤:求得当前节点通过逻辑运算符得出的值。
递归函数流程:
1. 当前问题规模为n=1时,即叶⼦节点,直接返回当前节点值;
2. 递归求得左右⼦节点的值;
3. 通过判断当前节点的逻辑运算符,计算左右⼦节点值运算得出的结果;
C++算法代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution
{
public:
bool evaluateTree(TreeNode* root)
{
//叶子节点返回值
if(root->left==nullptr&&root->right==nullptr)
{
return root->val==0?false:true;
}
//获取左右bool值
bool left=evaluateTree(root->left);
bool right=evaluateTree(root->right);
//计算
return root->val==2?left||right:left&&right;
}
};
Java算法代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution
{
public boolean evaluateTree(TreeNode root)
{
if (root.left == null) return root.val == 0 ? false : true;
boolean left = evaluateTree(root.left);
boolean right = evaluateTree(root.right);
return root.val == 2 ? left | right : left & right;
}
}