二叉树递归题目(一)
一:计算布尔二叉树的值
1.1题目

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

1.3代码
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代码
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代码实现
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; }
};
