其实就是删除所有叶子结点及其父节点。
1.如果为空,无可再删,返回空。
2.如果有一个孩子结点是叶结点,无论左右,父子均删,返回空。
3.如果两个孩子均不是叶子结点,左子树最终结果为递归左孩子的结果,右子树亦如此。
struct TreeNode* pruneLeaves(struct TreeNode* root ) {
if(root == NULL) //空空如也,无可删
return NULL;
//左结点是叶子结点,右结点不是叶子结点,父子均亡
if(root->right != NULL
&& root->right->right == NULL && root->right->left == NULL)
return NULL;
//左结点不是叶子结点,右结点是叶子结点,父子均亡
if(root->left != NULL
&& root->left->right == NULL && root->left->left == NULL)
return NULL;
//左右都不是叶子结点时
//左子树的最终结果要递归左孩子结点,右子树亦如此
root->left = pruneLeaves(root->left);
root->right = pruneLeaves(root->right);
return root;
}

京公网安备 11010502036488号