其实就是删除所有叶子结点及其父节点。
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; }