为啥我的修剪二叉树的递归解决方案不起作用?
Posted
技术标签:
【中文标题】为啥我的修剪二叉树的递归解决方案不起作用?【英文标题】:Why does my recursive solution to pruning binary tree not work?为什么我的修剪二叉树的递归解决方案不起作用? 【发布时间】:2021-10-01 10:04:42 【问题描述】:问题链接:https://leetcode.com/problems/binary-tree-pruning/
基本上,给定二叉树的根,返回同一棵树,其中每个不包含 1 的子树(给定树的)都已被删除。
我的代码:
/**
* 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:
TreeNode* pruneTree(TreeNode* root)
recurse(root);
return root;
bool recurse(TreeNode* &root)
if (root == nullptr)
return false;
cout<<"val: "<<root->val<<" ";
if (recurse(root->left) == false && recurse(root->right) == false && root->val==0)
root = nullptr;
return false;
return true;
;
使用打印语句,我发现在找到一个要删除的节点后,它会删除它,然后停止递归并返回树。为什么会这样?
【问题讨论】:
【参考方案1】:if ( ... )
为了使 if
语句的计算结果为 true
,if
语句中的两个递归调用都必须返回 false。这个if
语句使用布尔&&
运算符。在 C++ 中,布尔 &&
运算符要求其左侧和右侧表达式都为真,在这种情况下,只有当递归调用返回 false
时才会发生这种情况。如果任何递归调用返回true
,则此if
语句在逻辑上不可能计算为true
。
当if
语句是false
时,下一个语句是:
return true;
因此,一旦递归调用的第一个return
返回true
,无论出于何种原因,所有正在进行的递归调用都必须导致调用if
语句以if
语句结束到false
,以及对return true;
的相应递归调用。
游戏结束。
【讨论】:
以上是关于为啥我的修剪二叉树的递归解决方案不起作用?的主要内容,如果未能解决你的问题,请参考以下文章