一:计算布尔二叉树的值
1.1题目

题目链接:https://leetcode.cn/problems/evaluate-boolean-binary-tree/description/
1.2算法原理

1.3代码
cpp
class Solution {
public:
bool evaluateTree(TreeNode* root)
{
if(root->right == nullptr)
return root->val;
bool leftval = evaluateTree(root->left);
bool rightval = evaluateTree(root->right);
return root->val == 2 ? rightval | leftval : rightval & leftval;
}
};
二:求根节点到叶节点数字之和
2.1题目

题目链接:https://leetcode.cn/problems/sum-root-to-leaf-numbers/description/
2.2算法原理

2.3代码
cpp
class Solution {
public:
int sumNumbers(TreeNode* root) {
return dfs(root,0);
}
int dfs(TreeNode* root,int presum)
{
int sum = presum * 10+ root->val;
if(root->left == nullptr && root->right == nullptr)
return sum;
int leftsum = 0, rightsum = 0;
if(root->left)
leftsum = dfs(root->left,sum);
if(root->right)
rightsum = dfs(root->right,sum);
return leftsum + rightsum;
}
};
三:二叉树剪枝
3.1题目

题目链接:https://leetcode.cn/problems/binary-tree-pruning/
3.2算法原理

3.3代码实现
cpp
class Solution {
public:
TreeNode* pruneTree(TreeNode* root)
{
if(root == nullptr)
return nullptr;
root->left = pruneTree(root->left);
root->right = pruneTree(root->right);
if(root->val == 0 && root->left == nullptr && root->right == nullptr)
{
//delete root;//内存泄漏,但是如果节点不是new出来的delete会报错
root = nullptr;
}
return root;
}
};